• 设计模式之----策略模式


    • 什么是策略模式

      策略模式将程序中的可变部分,抽象成一个算法接口,然后在这个接口下封装一系列算法。

      策略模式具有可扩展性,如果有新的需求来了,就增加新的算法就可以(更多详细可以在慕课网上看到)

     

    比如原来有只“鸭子“ 但是它不会飞,要想给它增加一个飞行的功能,具体的实现步骤

      1)定义一个飞行接口(算法接口)

      2)实现一种飞行方式(具体的实现算法)

      3)在“鸭子”的父类,增加一个飞行的属性,并给这个属性set方法。应用这个属性(依赖于抽象而不是依赖于具体)

      4)“鸭子”具体实现类,在构造器中set 飞行的具体实现类。(算法的选择)

     

    下面是简单的代码实现;

      鸭子的父类

    package duck;
    
    import fly.Fly;
    
    /**
     * 
     * @author zheng.zhong
     *这是一个鸭子的基本属性
     */
    public abstract class Duck {
        
        private Fly fly;
        
        /**
         * 外观
         */
        public abstract void look();
        /**
         * 
         */
        public abstract void jiao();
        
        public void fly(){
            fly.fly();
        }
        
        public void setFly(Fly fly) {
            this.fly = fly;
        }
        
    }
    View Code

      飞行的接口

    package fly;
    
    public interface Fly {
        /**
         * 具体的飞行方式
         */
        public void fly();
    }
    View Code

      飞行的具体实现

    package fly;
    
    public class FlyBywind implements Fly {
    
        @Override
        public void fly() {
            // TODO Auto-generated method stub
            System.out.println("用翅膀飞行");
        }
    
    }
    View Code

      鸭子的具体实现

    package duck;
    
    import fly.FlyBywind;
    
    public class YelloDuck extends Duck {
        YelloDuck(){
            super();
            super.setFly(new FlyBywind());
        }
        
        @Override
        public void look() {
            System.out.println("大黄鸭");
    
        }
    
        @Override
        public void jiao() {
            // TODO Auto-generated method stub
            System.out.println("--呱呱呱--");
        }
    
    }
    View Code

      测试代码

    package duck;
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Duck duck=null;
            duck=new YelloDuck();
            duck.look();
            duck.jiao();
            duck.fly();
        }
    
    }
    View Code

      测试结果

    大黄鸭
    --呱呱呱--
    用翅膀飞行

    看到结果,我们已经实现了赋予鸭子的飞行能力。并且这能力能赋予其他鸭子,代码的复用和维护性增强。这个就是策略模式。

     

    学习的时间不一定要特定安排
  • 相关阅读:
    thinkphp5.0与thinkphp3.2之间的区别
    比较数组大小
    PHP语言开发微信公众平台(订阅号)之curl命令(补充)
    ThinkPHP3.2.3快速入门:基础篇
    phpcms利用表单向导创建留言板(可以回复)
    Vijos P1782 借教室 ( 前缀和&&差分序列)
    HDU2648:Shopping(DKBR_hash)
    Codeforces Round #375 (Div. 2)
    BestCoder Round #88
    Codeforces Round #373 (Div. 2)
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5845568.html
Copyright © 2020-2023  润新知