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();
            }
        }
    }
    

      

  • 相关阅读:
    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2
    网站状态保存方法
    学习MVC第一课:初识MVC
    ASP.NET MVC 中动态从路由中获取URL
    ASP.NET MVC2程序开发入门到精通系列课程01
    OpenCV 里的sigma 是多少
    日期大小比较
    安装完ODAC,出现ORA12560:TNS:协议适配器错误
    Spring+IBATIS+Struts2开发流程
    【转】SSH标准配置
  • 原文地址:https://www.cnblogs.com/kaysily/p/4590480.html
Copyright © 2011-2022 走看看