设计模式一:策略模式
2017-04-25 13:04
218 查看
一.策略模式中用到的设计原则
1.找出代码中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起.2.针对接口编程,而不是实现编程
二.策略模式
1.概念
定义了算法族,分别分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户2.为什么使用策略模式
如果现在有一个超类Duck(鸭子),该鸭子有飞,叫等行为,现在我们要实现两个子类,这两个子类也要有飞,叫等行为,那我们直接继承此超类Duck即可,但现在需要一个会呱呱叫或者嘎嘎叫的子类,总之和超叫的行为有差异,那我们可以在写一个子类,重写其超类的叫方法,如果还有其它的变化,那么要写很多的子类,非常麻烦。下面我们使用策略模式来解决
策略模式把其变化的部分和不变的部分分开,上述代码中变化的部分是鸭子的行为,所以我们把鸭子的行为提出来,用接口和实现类的方式来表示。
三.代码
超类:public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
flyBehavior = new FlyNoWay();
quackBehavior= new Quack();
}
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
public FlyBehavior getFlyBehavior() {
return flyBehavior;
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public QuackBehavior getQuackBehavior() {
return quackBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
飞行为接口:
public interface FlyBehavior {
public void fly();
}
叫行为接口:
public interface QuackBehavior {
public void quack();
}
飞行为两个实现类:
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I can't fly");
}
}
public class FlyWithWings implements FlyBehavior { @Override public void fly() { // TODO Auto-generated method stub System.out.println("I'm fly"); } }
叫行为两个实现类:
public class MuteQuack implements QuackBehavior {
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Mute Quack");
}
}
public class Quack implements QuackBehavior { @Override public void quack() { // TODO Auto-generated method stub System.out.println("quack"); } }
子类:
public class MinaDuck extends Duck {
public static void main(String[] args) {
//默认的行为
MinaDuck minaDuck= new MinaDuck();
minaDuck.performFly();
minaDuck.performQuack();
//当行为改变时,不需要其重新继承Duck,生成其子类,只要其设置不同的行为即可
FlyBehavior flyBehavior = new FlyWithWings();
minaDuck.setFlyBehavior(flyBehavior);
minaDuck.performFly();
}
}
相关文章推荐
- 【设计模式】策略模式详解
- java设计模式--行为型模式--策略模式
- 策略设计模式
- 设计模式之策略模式(一对象行为型)
- 面向对象设计模式之策略模式
- Java设计模式之策略模式
- 学习篇:设计模式之策略模式
- 设计模式实战(一)——使用策略模式(strategy pattern)实现多关键字排序
- 设计模式知识连载(29)---策略模式:
- 走向设计(策略模式)
- 设计模式之Strategy(策略)
- 设计模式之策略模式
- 【设计模式】 模式PK:命令模式VS策略模式
- 设计模式解析(第二版)笔记7 设计模式的原则与策略
- 设计模式之禅之设计模式-策略模式
- 项目设计之一-------------策略模式应用
- 设计模式 策略模式 以角色游戏为背景
- 《Head First 设计模式》之策略模式
- Java设计模式之策略模式
- java设计模式之 strategy策略模式