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

  • 什么是策略模式

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

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

 

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

  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

  测试结果

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

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

 

学习的时间不一定要特定安排
原文地址:https://www.cnblogs.com/zhongzheng123/p/5845568.html