[用設計模式鍛鍊C#系列]之Strategy (轉)
名稱:Strategy
中文名:策略
型別:行為型
簡介:一般用於多策略解決方式的實現.
本人以為,它的設計思路和Bridge
很象像.然Stratege的焦點是多策略的實現,
而Bridge目的於的低耦合性,
當然strategy的特性它亦可實現.
因為它們都是基本依賴於中的多型特性.
它在很多體現多策略的情況下是繼承最好的
替代者.
// created on -3-14 at 7:27
using System;
//member: strategy concretestrategy context
interface strategy{
string multi_purpose(string _str);
}
class concretestrategy1:strategy{
public string multi_purpose(string _str)
{
return (_str+" concretestrategy1");
}
}
class concretestrategy2:strategy{
public string multi_purpose(string _str)
{
return (_str+"concretestrategy2");
}
}
class context{
private strategy _strategy;
public context(strategy m_STR){
_strategy = m_STR;
}
public string Test(string m_STRcontext)
{
return _strategy.multi_purpose(m_STRcontext);
}
}
class designpattern_test{
public static void Main(){
int m_Inum;
context m_CON = null;
Console.WriteLine("Which method you will choose :n"+
"1.quick but not pricition.n"+
"2.pricition but not quick.n"+
"1 or 2?n");
for(;;){
string m_STR = Console.ReadLine();
if(m_STR == "1" || m_STR == "2")
{
m_Inum = Int32.Parse(m_STR);
break;
}
else
{
Console.WriteLine("Which method you will choose :n"+
"1.quick but not pricition.n"+
"2.pricition but not quick.n"+
"1 or 2?n");
}
}
if(m_Inum == 1)
m_CON =new context(new concretestrategy1());
else
m_CON =new context(new concretestrategy2());
if(m_CON != null)
{
Console.WriteLine(m_CON.Test("I am"));
}
else
{
Console.WriteLine("May be there is a memory exception.n");
}
}
}
點評:
1.首先還是的介面的原生支援interface.
我們需要知道繼承類對它的簽名方法的實現
必須是public.關於本人對它的看法詳見bridge篇.
2.順便提及:C#不在支援初始化列表和預設引數的行為.
3.其它關於很多實現機制原理同於Bridge.
擴充套件:
1.在設計中,可針對strategy和context資訊互動的實際情況酌情進行
耦合度的調整.
2.在context中構置預設的concretestrategy,在沒有特殊要求的
情況下,提高機率意義上的提高.
3.在具體的實現上,可以用模板來實現:
template
class context{
private concretestrategy _strategy;
public string operation(string m_STRcontext){
return _strategy.multi_method(m_STRcontext);
}
}
---------------------------------------------------------------------
宣告:本程式重在演示C#基本用法
不考慮在實際環境中應用帶來
其它問題的情況.
如:多執行緒.
系列文章宣告請見第一篇:
[用設計鍛鍊C#系列]之Singleton、Bridge
---------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992933/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [用設計模式鍛鍊C#系列]之Builder (轉)設計模式C#UI
- [用設計模式鍛鍊C#系列]之Decorator (轉)設計模式C#
- [用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)設計模式C#
- Java設計模式之策略模式(Strategy)Java設計模式
- 18 個鍛鍊程式設計技能的網站程式設計網站
- 程式設計師工作之餘應該注意鍛鍊自己的身體程式設計師
- 1/24 設計模式之策略設計模式 Strategy Pattern設計模式
- C#設計模式系列:代理模式(Proxy)C#設計模式
- 001 增肌鍛鍊
- C#設計模式之命令模式C#設計模式
- 設計模式系列之「策略模式」設計模式
- 設計模式系列之「代理模式」設計模式
- C#設計模式系列:命令模式(Command)C#設計模式
- C#設計模式系列:狀態模式(State)C#設計模式
- C#設計模式系列:原型模式(Prototype)C#設計模式原型
- C#設計模式系列:建造者模式(Builder)C#設計模式UI
- C#設計模式系列:裝飾模式(Decorator)C#設計模式
- C#設計模式系列:觀察者模式(Observer)C#設計模式Server
- C#設計模式系列:迭代器模式(Iterator)C#設計模式
- 【嵌入式c++】設計模式之策略模式(Strategy)C++設計模式
- 設計模式-策略模式(strategy pattern)設計模式
- 設計模式——13策略模式(strategy)設計模式
- 設計模式(六)策略模式Strategy設計模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之狀態模式C#設計模式
- C#設計模式之享元模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之迭代器模式C#設計模式
- C#設計模式之代理模式(四)C#設計模式
- C#設計模式之代理模式(三)C#設計模式
- C#設計模式之代理模式(二)C#設計模式
- C#設計模式之代理模式(一)C#設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- 設計模式系列之「裝飾模式」設計模式
- 設計模式系列之「門面模式」設計模式
- 設計模式系列之「中介者模式」設計模式
- 設計模式系列之「組合模式」設計模式