zoukankan      html  css  js  c++  java
  • C#设计模式:策略者模式(Stragety Pattern)

    一,什么是策略模式?

    1,针对同一命令或行为,不同的策略做不同的动作。

    2,比如针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

    二,如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace _19.策略模式
    {
        /// <summary>
        /// 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。
        /// 策略模式通常把一系列的算法包装到一系列的策略类里面。
        /// 用一句话慨括策略模式就是——“将每个算法封装到不同的策略类中,使得它们可以互换”。
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                while (true)
                {
                    Console.WriteLine("输入第一个数字(整数):");
                    string type = Console.ReadLine();
                    int iType = 0;
                    if (!int.TryParse(type, out iType))
                    {
                        Console.WriteLine("输入数字无效,请重新输入");
                        continue;
                    }
                    ///策略的调用
                    StrategyContext context = new StrategyContext();
                    context.SetStrategy(StrategyFortory.CreateInstance((StrategyType)iType));
                    context.Setup();
                }
            }
        }
        /// <summary>
        /// 使用工厂模式管理策略
        /// </summary>
        public class StrategyFortory
        {
            public static AbstractStrategy CreateInstance(StrategyType type)
            {
                AbstractStrategy abstractStrategy = null;
                switch (type)
                {
                    case StrategyType.Chinese:
                        abstractStrategy = new ChineseStrategy();
                        break;
                    case StrategyType.Usa:
                        abstractStrategy = new UsaStrategy();
                        break;
                }
                return abstractStrategy;
            }
        }
        /// <summary>
        /// 抽象策略
        /// </summary>
        public abstract class AbstractStrategy
        {
            public abstract void Setup();
        }
        /// <summary>
        /// 具体策略
        /// </summary>
        public class ChineseStrategy : AbstractStrategy
        {
            public override void Setup()
            {
                Console.WriteLine("中国人");
            }
        }
        /// <summary>
        /// 具体策略
        /// </summary>
        public class UsaStrategy : AbstractStrategy
        {
            public override void Setup()
            {
                Console.WriteLine("美国人");
            }
        }
        /// <summary>
        /// 策略的使用
        /// </summary>
        public class StrategyContext
        {
            AbstractStrategy strategy = null;
            public void SetStrategy(AbstractStrategy strategy)
            {
                this.strategy = strategy;
            }
            public void Setup()
            {
                this.strategy.Setup();
            }
        }
        /// <summary>
        /// 策略枚举
        /// </summary>
        public enum StrategyType
        {
            Chinese = 0,
            Usa = 1
        }
    }
  • 相关阅读:
    LAMP课程(3)
    LAMP课程
    vim文本编辑
    mysql常用语句
    mysql双机互相备份
    Java NIO
    适配器模式
    对象的序列化与反序列化
    字符流
    Java Socket
  • 原文地址:https://www.cnblogs.com/May-day/p/6553557.html
Copyright © 2011-2022 走看看