• 简单的设计模式


    这个是《大话设计模式》中的一些简单例子,

    简单易懂,所以整理下来,方便大家查看。其实我们大多只要熟悉几种设计模式就好了。


    public static void Main(string[] args)
            {
                //Test简单工厂();
                //Test策略模式();
                //Test装饰模式();
                //Test代理模式();
                //Test工厂方法();
    
                Console.Read();
            }
    
    
            #region 模式-简单工厂
            public abstract class Operation
            {
                public double NumA { get; set; }
                public double NumB { get; set; }
    
                public abstract double GetResult();
            }
    
            public class Add : Operation
            {
                public override double GetResult()
                {
                    return NumA + NumB;
                }
            }
    
            public class Mul : Operation
            {
                public override double GetResult()
                {
                    return NumA - NumB;
                }
            }
    
            public class OperationFactory
            {
                public static Operation CreateOperation(string operation)
                {
                    Operation o = null;
                    switch (operation)
                    {
                        case "+": o = new Add(); break;
                        case "-": o = new Mul(); break;
                    }
                    return o;
                }
            }
    
            public static void Test简单工厂()
            {
                Operation o = OperationFactory.CreateOperation("+");
                o.NumA = double.Parse(Console.ReadLine());
                o.NumB = double.Parse(Console.ReadLine());
    
                double result = o.GetResult();
                Console.WriteLine(result);
            }
    
            #endregion
    
            #region 模式-策略模式
    
            //抽象算法
            public abstract class Strategy
            {
                //算法方法
                public abstract void AlgorithmInterface();
            }
    
            public class ConcreteStrategyA : Strategy
            {
    
                public override void AlgorithmInterface()
                {
                    Console.WriteLine("A");
                }
            }
    
            public class ConcreteStrategyB : Strategy
            {
    
                public override void AlgorithmInterface()
                {
                    Console.WriteLine("B");
                }
            }
    
            public class ConcreteStrategyC : Strategy
            {
    
                public override void AlgorithmInterface()
                {
                    Console.WriteLine("C");
                }
            }
    
            public class Context
            {
                Strategy strategy = null;
                public Context(Strategy strategy)
                {
                    this.strategy=strategy;
                }
    
                public void ConcreteStrategy()
                {
                    strategy.AlgorithmInterface();
                }
            }
    
            public static void Test策略模式()
            {
                Context c = new Context(new ConcreteStrategyA());
                c.ConcreteStrategy();
    
                c = new Context(new ConcreteStrategyC());
                c.ConcreteStrategy();
            }
    
            #endregion
    
            #region 模式-装饰模式
    
            abstract class Component
            {
                public abstract void Operation();
            }
    
            class ConcreteComponent : Component
            {
    
                public override void Operation()
                {
                    Console.WriteLine("具体对象的操作");
                }
            }
    
            abstract class Decorator : Component
            {
                protected Component component;
                public void SetComponent(Component component)
                {
                    this.component = component;
                }
                public override void Operation()
                {
                    if (component != null)
                    {
                        component.Operation();
                    }
                }
            }
    
            class ConcreteDecoratorA : Decorator
            {
                private string addedState;
                public override void Operation()
                {
                    base.Operation();
                    addedState = "New State";
                    Console.WriteLine("具体装饰对象A的操作");
                }
            }
    
            class ConcreteDecoratorB : Decorator
            {
                public override void Operation()
                {
                    base.Operation();
                    AddBehavior();
                    Console.WriteLine("具体装饰对象B的操作");
    
                }
    
                public void AddBehavior()
                { 
                    
                }
            }
    
            public static void Test装饰模式()
            {
                ConcreteComponent c = new ConcreteComponent();
                ConcreteDecoratorA d1 = new ConcreteDecoratorA();
                ConcreteDecoratorB d2 = new ConcreteDecoratorB();
                d1.SetComponent(c);
                d2.SetComponent(d1);
                d2.Operation();
    
            }
    
            #endregion
    
            #region 模式-代理模式
    
            abstract class Subject
            {
                public abstract void Request();
            }
    
            class RealSubject : Subject
            {
                public override void Request()
                {
                    Console.WriteLine("真实请求");
                }
            }
    
            class Proxy : Subject
            {
                RealSubject realSubject;
                public override void Request()
                {
                    if (realSubject == null)
                        realSubject = new RealSubject();
                    realSubject.Request();
                }
            }
    
            public static void Test代理模式()
            {
                Proxy proxy = new Proxy();
                proxy.Request();
                Console.ReadLine();
            }
    
            #endregion
    
            #region 模式-工厂方法
    
            //沿用简单工厂抽象类
            interface IFactory
            {
                Operation CreateOperation();
            }
    
            class AddFactory : IFactory
            {
    
                public Operation CreateOperation()
                {
                    return new Add();
                }
            }
    
            class MulFactory : IFactory
            {
    
                public Operation CreateOperation()
                {
                    return new Mul();
                }
            }
    
            public static void Test工厂方法()
            {
                IFactory operFactory = new AddFactory();
                Operation oper = operFactory.CreateOperation();
                oper.NumA = 1;
                oper.NumB = 2;
                double result = oper.GetResult();
    
                Console.WriteLine(result);
            }
    
            #endregion
    
            #region 模式-原型模式
            
    
    
            #endregion







  • 相关阅读:
    移动端轮播图
    移动端的注册页面
    点击显示或者消失的效果(手风琴效果)
    canvas的一些简单绘制方法
    用canvas来手动绘画
    canvas标签的运用
    Html5新标签解释及用法
    最近的心得
    浅谈正则表达式
    P3197 [HNOI2008]越狱
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779762.html
Copyright © 2020-2023  润新知