设计模式:策略模式
程序员文章站
2022-05-05 13:28:15
...
策略模式定义:
策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
白话解释:策略模式可以理解为按照不同的行为的表现形式不同,将行为和具体的事物分开,最终达到根据不同的对象具有不同的行为的结果。
例如:这个也是我接下来的例子中会用到例子,我们都知道鸭子,可以分为很多的种类,北京鸭、玩具鸭等等....其中飞行的能力却各不相同,那我们的最终希望是啥?我们肯定是希望如果我给你的是玩具鸭你就告诉我他不能飞翔,给你个其他的鸭子你就给我一个正确的飞行能力的正确反馈。
如何实现:
接口设计的UML类图如下:
代码如下:
飞行能力接口:DuckFlyBehavior
public interface DuckFlyBehavior {
void fly();
}
不同的实现:
public class BadAtFly implements DuckFlyBehavior{
@Override
public void fly() {
System.out.println("i'm not at flying...");
}
}
public class CanNotFly implements DuckFlyBehavior{
@Override
public void fly() {
System.out.println("i can't fly ...");
}
}
duck类:
public abstract class Duck {
DuckFlyBehavior duckFlyBehavior;
public abstract void disply();
public void setDuckFlyBehavior(DuckFlyBehavior duckFlyBehavior){
this.duckFlyBehavior=duckFlyBehavior;
}
}
不同的duck:
public class PeKingDuck extends Duck {
public PeKingDuck(){
this.duckFlyBehavior = new BadAtFly();
}
@Override
public void disply() {
System.out.println("i am peking duck");
}
}
public class ToyDuck extends Duck{
public ToyDuck(){
this.duckFlyBehavior = new CanNotFly();
}
@Override
public void disply() {
System.out.println("i am toy duck");
}
}
测试类:
public class TestStrategy {
public static void main(String[] args) {
ToyDuck toyDuck = new ToyDuck();
toyDuck.disply();
toyDuck.duckFlyBehavior.fly();
}
}
测试结果:
i am toy duck
i can't fly ...
试想一下,我们不使用设计模式,我们写的代码会是怎么样的呢?
上一篇: vivo X27/华为nova 4e都来了!一大波新机天猫3月首发
下一篇: 一般结婚嫁妆是送什么