其它模式:

   一.Strategy Pattern(策略模式)
   二.Template Method Pattern(模版方法模式)

   三.Bridge Pattern(橋接模式)
   四.Visitor Pattern(訪問者模式)



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();
    }
}



相关文章: