zoukankan      html  css  js  c++  java
  • 设计模式之----策略模式

    • 什么是策略模式

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

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

     

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

      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

      测试结果

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

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

     

    学习的时间不一定要特定安排
  • 相关阅读:
    批量删除.svn文件夹、.svn文件
    Windows 7下Git SSH 创建Key的步骤
    Git:本地项目与远程仓库的git/clone
    git解决二进制文件冲突
    git设置mergetool可视化工具
    redhat7.2配置yum源
    project2016安装与破解
    strace 使用案例
    运维老鸟教你安装centos6.5如何选择安装包
    CSS限制
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5845568.html
Copyright © 2011-2022 走看看