策略模式和簡單工廠

策略算法類:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StrategyDemo
{
    abstract class Strategy
    {
        public abstract void BillInterface();
    }

    class ConcreteStrategyA : Strategy
    {
        public override void BillInterface()
        {
            Console.WriteLine("算法A的實現");
        }
    }

    class ConcreteStrategyB : Strategy
    {
        public override void BillInterface()
        {
            Console.WriteLine("算法B的實現");
        }
    }

    class ConcreteStrategyC : Strategy
    {
        public override void BillInterface()
        {
            Console.WriteLine("算法C的實現");
        }
    }
}

上下文類封裝簡單工廠

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StrategyDemo
{
    class Context
    {
        Strategy strategy;
        public const int TYPEA = 1;
        public const int TYPEB = 2;
        public const int TYPEC = 3;
        public Context(int i)
        {
            switch (i)
            {
                case TYPEA:
                    strategy = new ConcreteStrategyA();
                    break;
                case TYPEB:
                    strategy = new ConcreteStrategyB();
                    break;
                case TYPEC:
                    strategy = new ConcreteStrategyC();
                    break;
                default:
                    break;
            }
        }

        //上下文接口
        public void ContextInterface()
        {
            strategy.BillInterface();
        }
    }
}

客戶端調用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StrategyDemo
{
    //策略模式和簡單工廠一起使用
    class Program
    {
        static void Main(string[] args)
        {
            Context context;
            context = new Context(Context.TYPEA);
            context.ContextInterface();
            context = new Context(Context.TYPEB);
            context.ContextInterface();
            context = new Context(Context.TYPEC);
            context.ContextInterface();
            Console.ReadKey();
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章