zoukankan      html  css  js  c++  java
  • 设计模式学习策略模式

    00基础:
    抽象;继承;封装;多态;
    00原则:
    封装变化;多用组合,少用继承;针对接口编程,不针对实现编程;
    OO模式:

    策略模式--定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _1.StrategyPattern
    {
    //定义接口
        public interface IFLY
        {
            string Fly();
        }
    
    //具体实现算法1
        public class RockFly : IFLY
        {
    
    
            public string Fly()
            {
                return "fly like rock";
            }
        }
    //具体实现算法2
        public class NormalFly : IFLY
        {
    
    
            public string Fly()
            {
                return "fly like normal";
            }
        }
        public class CanotFly : IFLY
        {
    
    
            public string Fly()
            {
                return " can't fly";
            }
        }
    
        public interface IQuack
        {
            string DuckQuack();
        }
    
        public class QuackBehavior : IQuack
        {
            public string DuckQuack()
            {
                return "NormalQuack";
            }
        }
        public class WiredQuackBehavior : IQuack
        {
            public string DuckQuack()
            {
                return "it's sounds like wired annimal";
            }
        }
        public class CantQuackBehavior : IQuack
        {
            public string DuckQuack()
            {
                return "no sounds";
            }
        }
    
        public class Duck
        {
            IFLY f;
            IQuack quack;
            public Duck()
            {
                f = new NormalFly();//在构造函数中实例化需要的算法
                quack = new QuackBehavior();
            }
    
    
            public void setFly(IFLY fly)
            {
    
                f = fly;//动态设置需要的算法
            }
            public string DuckFly()
            {
                return f.Fly();
            }
            public string DuckQuack()
            {
                return quack.DuckQuack();
            }
        }
    
        public class MachineDuck
        {
            IFLY f;
            IQuack quack;
            public MachineDuck()
            {
                f = new RockFly();
                quack = new CantQuackBehavior();
            }
            public string DuckFly()
            {
                return f.Fly();
            }
            public string DuckQuack()
            {
                return quack.DuckQuack();
            }
        }
    }
    

      

  • 相关阅读:
    npm执行清理缓存失败npm cache clean
    Vue中计算属性(computed)和监听属性函数watch的比较
    vue生命周期函数
    vue自定义指令
    vue 自定义过滤器
    vue 自定义全局按键修饰符
    线性回归模型
    python常用模块
    KNN算法的实现
    python集合(set)的运算
  • 原文地址:https://www.cnblogs.com/kaysily/p/4590480.html
Copyright © 2011-2022 走看看