• 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("");
            }
  • 相关阅读:
    MySQL Server类型的MySQL 客户端的下载、安装和使用
    Sqoop学习笔记
    Sqoop安装部署
    Hive学习笔记
    HBase构架原理
    HBase HA分布式集群搭建
    IntelliJ IDEA(Community版本)本地模式的下载、安装及其使用
    Scala本地安装
    CALayer的隐式动画和显式动画
    简易动画两种执行方式
  • 原文地址:https://www.cnblogs.com/kavilee/p/2362891.html
Copyright © 2020-2023  润新知