zoukankan      html  css  js  c++  java
  • C# 策略模式(Strategy)

    理解:当一件事件(基类),在不同的时间或者不同的地点需要不同的策略时,考虑用该模式,好处就是修改或者添加某个子策略时不会影响其它子策略,也不用去修改客户端

    代码:

    using System.Windows.Forms;

    namespace DesignMode.Strategy
    {
        //4S手机抽象类
        public abstract class IPhone4S
        {
            public abstract void GetPrice(string color);
        }

        //港版4S
        public class HK_IPhone4S : IPhone4S
        {
            public override void GetPrice(string color)
            {
                if (color.Equals(""))
                {
                    MessageBox.Show("港版白色价格为:4199");
                }
                else if (color.Equals(""))
                {
                    MessageBox.Show("港版黑色价格为:3999");
                }
                else
                {
                    MessageBox.Show("港版" + color + "色无货");
                }
            }
        }

        //台版4S
        public class TW_IPhone4S : IPhone4S
        {
            public override void GetPrice(string color)
            {
                if (color.Equals(""))
                {
                    MessageBox.Show("台版白色价格为:5199");
                }
                else if (color.Equals(""))
                {
                    MessageBox.Show("台版红色价格为:4999");
                }
                else
                {
                    MessageBox.Show("台版" + color + "色无货");
                }
            }
        }

        //大陆版4S
        public class CN_IPhone4S : IPhone4S
        {
            public override void GetPrice(string color)
            {
                if (color.Equals(""))
                {
                    MessageBox.Show("大陆版白色价格为:5999");
                }
                else
                {
                    MessageBox.Show("大陆版" + color + "色无货");
                }
            }
        }


        //手机销售店
        public class MobileShop
        {
            IPhone4S _i4s;
            public MobileShop(string type)
            {
                //简单工厂模式
                switch (type)
                { 
                    case "港版":
                        _i4s = new HK_IPhone4S();
                        break;
                    case "台版":
                        _i4s = new TW_IPhone4S();
                        break;
                    case "大陆版":
                        _i4s = new CN_IPhone4S();
                        break;
                }
            }

            public void DisplayPrice(string color)
            {
                _i4s.GetPrice(color);
            }
        }
    }

    客户端代码:

            private void btn_Strategy_Click(object sender, EventArgs e)
            {
                MobileShop shopTW = new MobileShop("台版");
                shopTW.DisplayPrice("");
                shopTW.DisplayPrice("");
                shopTW.DisplayPrice("");

                MobileShop shopHK = new MobileShop("港版");
                shopHK.DisplayPrice("");
                shopHK.DisplayPrice("");
                shopHK.DisplayPrice("");

                MobileShop shopCN = new MobileShop("大陆版");
                shopCN.DisplayPrice("");
                shopCN.DisplayPrice("");
                shopCN.DisplayPrice("");
            }
  • 相关阅读:
    用ps命令查看进程的内存
    女人
    一个中文系高材生的高水平请假条
    常用元件封装
    premiere 视频滤镜详解
    Start of Authority Record (SOA) (转) Anny
    DNS Record Format and Types Anny
    域名解析的配置文件 /etc/resolv.conf Anny
    System Information Record (HINFO)(转) Anny
    Bug分析:为bug预防奠定基础 (转) Anny
  • 原文地址:https://www.cnblogs.com/kavilee/p/2362891.html
Copyright © 2011-2022 走看看