• head first (一):策略模式


    head first 看了一遍,被面试时问我工厂模式,我发现我还是不记得,所以还是认认真真的看一遍吧,上一遍看的太快了,什么都没有记住。这一遍我会写下一些东西帮助自己记忆和理解,例子我也会用C#自己写一遍,所以感觉不错哦。

    1:定义

    策略模式:定义算法族,分别封装起来,让他们之间可以相互替换。

    设计原则: 找到可能变化之处,把它们独立出来。

         针对接口编程,而不是针对实现编程

         多用组合,少用继承,行为是组合来的,而不是继承来的。

    2:代码实现

    C#源代码

    鸭子飞的接口和动作实现

       public interface IFly
        {
             void fly();
        }
        public class FlyWithWings : IFly
        {
            public void fly()
            {
                Console.WriteLine("I'm flying!!");
            }
        }
    
        public class FlyNoWay : IFly
        {
            public void fly()
            {
                Console.WriteLine("I cannot fly!!");
            }
        }

    鸭子叫的接口和实现

       public interface IQuack
        {
             void quack();
        }
           //有声
        public class Quack : IQuack
        {
            public void quack()
            {
                Console.WriteLine("Quack");
            }
        }
    
        //无声
        public class MuteQuack : IQuack
        {
            public void quack()
            {
                Console.WriteLine("<< Silence>>");
            }
        }
    
        //吱吱声
        public class Squeak : IQuack
        {
            public void quack()
            {
                Console.WriteLine("Squeak");
            }
        }

    鸭子超类

    public abstract class Duck
        {
           public IFly flyBehavior;
           public IQuack quackBehavior;
            public void performQuack()
            {
                quackBehavior.quack();
            }
    
            public void performFly()
            {
                flyBehavior.fly();
            }
    
            public void setFly(IFly flybehavior)
            {
                flyBehavior = flybehavior;
            }
    
            public void setQuack(IQuack quackbehavior)
            {
                quackBehavior = quackbehavior;
            }
    
            public void swim()
            {
                Console.WriteLine("all can swim");
            }
    
            public abstract void display();
    
        }

    模型鸭子,继承鸭子

        public class ModelDuck : Duck
        {
            public ModelDuck()
            {
                flyBehavior = new FlyWithWings();
                quackBehavior = new Squeak();
            }
            public override void display()
            {
                Console.WriteLine("I'm a model duck");
            }
        }

    使用模型鸭子

                Duck model = new ModelDuck();
                model.performFly();
                model.performQuack();
                model.setFly(new FlyNoWay());
                model.performFly();
                model.performQuack();

    输出结果

  • 相关阅读:
    SQL Server中跨服务器跨数据库之间的数据增删改查
    Tomcat部署项目的方法
    java的位运算
    手机和邮箱格式验证
    Java实现List中某个对象属性中的字符串参数首字母进行排序
    springboot+dubbo+ZooKeeper+mybatis搭建分布式项目
    Java爬页面数据
    判断指定日期是否为节假日、双休日、工作日
    Java代码ping ip工具类
    Java生成压缩文件(zip、rar 格式
  • 原文地址:https://www.cnblogs.com/xiaoshuai1992/p/headfirst1.html
Copyright © 2020-2023  润新知