即插即用
posts - 44, comments - 269, trackbacks - 22, articles - 0
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
一.Strategy Pattern(策略模式)
Posted on 2007-02-28 14:11
自適應軟件......
阅读(1416)
评论(6)
编辑
收藏
所属分类:
Design Pattern
其它模式:
一.Strategy Pattern(策略模式)
二.Template Method Pattern(模版方法模式)
三.Bridge Pattern(橋接模式)
四.Visitor Pattern(訪問者模式)
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Strategy Pattern.aspx.cs
"
Inherits
=
"
Pattern_Strategy_Pattern
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
runat
="server"
>
<
title
>
Strategy Pattern
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
asp:TextBox
ID
="tb_result"
runat
="server"
TextMode
="MultiLine"
Rows
="5"
></
asp:TextBox
>
<
asp:Button
ID
="bt_submit"
runat
="server"
OnClick
="bt_submit_Click"
Text
="StrategyPattern"
/>
<
select
id
="strategy_select"
runat
="server"
>
<
option
value
="A"
selected
="selected"
>
A
</
option
>
<
option
value
="B"
>
B
</
option
>
<
option
value
="C"
>
C
</
option
>
</
select
>
</
div
>
</
form
>
</
body
>
</
html
>
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Text;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
///
<summary>
///
策略模式,
///
1.使用情況:1).讓一個對象動態的選擇多種行為.2)讓一個系統動態的選擇多種算法,而且算法使用數據和內容不讓客戶端知道.
///
2.優點:1)恰當的使用了繼承,可以把行為類的很多公用代碼移到父類,這樣減少了代碼的重複性.
///
3.缺點:1)各種行為需要共同的接口,因此,在用此模式前,要清楚所有的行為.
///
4.比較:策略模式与很多其它的模式都有着广泛的联系。Strategy很容易和Bridge模式相混淆。虽然它们结构很相似,但它们却是为解决不同的问题而设计的。
///
Strategy模式注重于算法的封装,而Bridge模式注重于分离抽象和实现,为一个抽象体系提供不同的实现。Bridge模式与Strategy模式都很好的体现了"Favor composite over inheritance"的观点。
///
</summary>
public
partial
class
Pattern_Strategy_Pattern : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
private
void
StrategyFactory()
{
Context ttt
=
null
;
switch
(strategy_select.Items[strategy_select.SelectedIndex].Value.ToString())
{
case
"
A
"
:
ttt
=
new
Context(
new
ConcreteStrategyA());
tb_result.Text
=
ttt.ContextInterface();
break
;
case
"
B
"
:
ttt
=
new
Context(
new
ConcreteStrategyB());
tb_result.Text
=
ttt.ContextInterface();
break
;
case
"
C
"
:
ttt
=
new
Context(
new
ConcreteStrategyC());
tb_result.Text
=
ttt.ContextInterface();
break
;
default
:
ttt
=
new
Context(
new
ConcreteStrategyC());
tb_result.Text
=
ttt.ContextInterface();
break
;
}
}
protected
void
bt_submit_Click(
object
sender, EventArgs e)
{
StrategyFactory();
}
}
abstract
class
Strategy
{
abstract
public
string
AlgorithmInterface();
}
class
ConcreteStrategyA : Strategy
{
public
override
string
AlgorithmInterface()
{
return
"
A
"
;
}
}
class
ConcreteStrategyB : Strategy
{
public
override
string
AlgorithmInterface()
{
return
"
B
"
;
}
}
class
ConcreteStrategyC : Strategy
{
public
override
string
AlgorithmInterface()
{
return
"
C
"
;
}
}
class
Context
{
Strategy strategy;
public
Context(Strategy strategy)
{
this
.strategy
=
strategy;
}
public
string
ContextInterface()
{
return
strategy.AlgorithmInterface();
}
}
Feedback
#1楼
回复
引用
查看
2007-02-28 14:43 by
JesseZhao
最好来点说明,只帖代码不怎么爽
#2楼
[
楼主
]
回复
引用
查看
2007-02-28 14:49 by
自適應軟件......
代碼中間有說明!
#3楼
回复
引用
查看
2007-02-28 16:48 by
NCindy
个人感觉Strategy更容易和TemplateMethod混淆。
#4楼
[
楼主
]
回复
引用
查看
2007-03-01 08:43 by
自適應軟件......
TemplateMethod:更注重事先定義一系列流程節點(包括屬性和方法),然後,再具體的實現,就像一個模板,只需要按照模板實現就好了.當然,也可以在定義模版的時候就處理一些公用方法,避免代碼的重複.
Strategy:看起來結構是很像TemplateMethod,可能是我的例子沒有選好.我覺得它更注重節點(動作,算法)的獨立性,系統(代碼)可以動態的隨意的新增節點或者調用節點.
#5楼
回复
引用
查看
2007-05-13 01:00 by
suiqirui
支持,
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-03-02 14:58 编辑过
相关文章:
.NET设计模式系列文章
.NET设计模式(2):单件模式(Singleton Pattern)
设计模式(22)-Strategy Pattern
设计模式随笔系列:鸭子-策略模式(Strategy)[原]
prototype.js 1.4版开发者手册(强烈推荐)
使用Visual Studio2005入门.Net2.0系列视频教程
相关链接:
所属分类的其他文章:
五.Action Pattern(命令模式)
四.Visitor Pattern(訪問者模式)
三.Bridge Pattern(橋接模式)
二.Template Method Pattern(模版方法模式)
一.Strategy Pattern(策略模式)
DesignPattern ----2(Iterator 迭代模式)
由”交通堵塞”引發的設計模式和程式優化
最新IT新闻:
Google推出Android Market挑战App Store
美国年轻人最喜欢的15大网站
2008年8月30日IT博客精选
《极品飞车12》最新真人照片、游戏截图
IBM正在开发超强性能4TB固态硬盘阵列
博客园新闻频道
博客园首页
社区
Powered by:
博客园
Copyright © 自適應軟件......
公告
与我互动
给我发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(13)
给我留言
查看私人留言
我参加的小组
LINQ
.NETCompactFramework
windows mobile 开发
oracle
我参与的团队
Windows Mobile 应用开发(0/579)
武汉.NET俱乐部(0/518)
Ajax&Atlas技术团队(0/1148)
天津.NET俱乐部(1/787)
珠海.NET俱乐部(0/161)
ASP.NET AJAX (Atlas)学习(0/1343)
随笔分类
(44)
.Net technology(14)
Ajax & Atlas(4)
Design Pattern(7)
Happy(2)
Javascript(8)
Pack away(4)
System analyzer(4)
XML technology (1)
随笔档案
(44)
2007年11月 (1)
2007年8月 (2)
2007年5月 (1)
2007年3月 (1)
2007年2月 (5)
2007年1月 (1)
2006年12月 (4)
2006年11月 (5)
2006年8月 (1)
2006年7月 (2)
2006年6月 (9)
2006年5月 (10)
2005年11月 (2)
收藏夹
(21)
.Net資源(11)
Java資源(8)
Linux資源(1)
Oracle資源(1)
Blogs 好友
Dflying
Itexsharp.org
itexsharp_coder
James
robin的Java博客
Thin
和訊
老張
文苑
积分与排名
积分 - 61389
排名 - 685
最新随笔
1. 求建模工具?
2. Isolated Storage Basics in .NET
3. .Net2.0用Profile存儲用戶信息
4. 最近手上有兩個項目,想找個人幫幫忙!
5. HttpHandler HttpModule 做出属于自己的后缀的网页 !
6. 五.Action Pattern(命令模式)
7. 四.Visitor Pattern(訪問者模式)
8. 三.Bridge Pattern(橋接模式)
9. 二.Template Method Pattern(模版方法模式)
10. 一.Strategy Pattern(策略模式)
11. 雞湯 收藏
12. 註冊表 和 任務管理器(工作管理員) 都打不開了 !
13. 首页图片效果:翻页
14. 我今天在做我們一個新的系統功能權限的時候,有一點新的想法,不知道是不是班門弄斧,歡迎扔扔雞蛋!
15. JavaScript 網頁打印處理
最新评论
1. re: 最近手上有兩個項目,想找個人幫幫忙!
@自適應軟件......
不知道现在待遇如何。不会还是这么低吧。。。
--huo
2. re: 求建模工具?
深圳市罗湖区宝安南路2014号振业大厦A7B
--自適應軟件......
3. re: 求建模工具?
At least 3 years on Asp.net project with C# or VB.NET. 2) Design knowledge, UML & Design p...
--自適應軟件......