`
liu_android_1002
  • 浏览: 8867 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

策略模式-java实现

阅读更多
策略模式: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

设计原则: 多用组合,少用继承。

设计一个Duck 类,由于 Duck的行为 fly  quack 是可以变化的,所以将可变化项 fly quack 抽象出来,

Duck 类
public abstract  class  Duck {

FlyBehavior   flyBehavior;
QuackBehavior quackBehavior;     //为行为接口类型声明两个引用变量,所有//Duck子类都继承它


public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;           
}

public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;   
}

public Duck(){

}

public abstract void display();

public void performFly(){
flyBehavior.fly();         //委托给行为类
}

public void performQuack(){
quackBehavior.quack();          //委托给行为类
}

}

fly 行为接口 FlyBehavior
public interface FlyBehavior {

public void fly();
}

quack 行为接口 QuackBehavior
public interface QuackBehavior {

public void quack();
}
fly实例
public class FlyWithWings implements FlyBehavior {

@Override
public void fly() {
System.out.println("I'm flying!!");

}

}
Quack实例
public class Quack implements QuackBehavior {

@Override
public void quack() {
System.out.println("Quack");

}

}

绿头鸭实例
public class MallardDuck extends Duck {

public MallardDuck() {
quackBehavior = new Quack();                   //绿头鸭使用Quack类//处理Quack,所以当                                             
                                                                                  //  perform Qucak()被调用时,Quack的职责就被委托                 
                                                                                  //     给Quack对象,儿我们得到了真正的Quack   
           
flyBehavior = new FlyWithWings();
}

@Override
public void display() {
System.out.println("I'm a real Mallard duck");

}

}

测试程序

public class MiniDuckSimulator {

public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();

mallard.setFlyBehavior(new FlyNoWay());//在运行时想改变鸭子的行 //为,只需调用鸭子的Setter方法就可以了
mallard.performFly();

}

}

分享到:
评论

相关推荐

    策略模式-JAVA语言实现.doc

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式-JAVA语言实现 信息系统分析与设计

    java实现策略模式-设计模式

    策略模式通过定义一组可互换的算法(即策略),将每个算法封装成相应的策略类。这样客户端可以根据需要选择不同的策略,并且能够灵活地切换和扩展策略,而不需要修改原有的代码逻辑。策略模式能够提高代码的灵活性、...

    design-pattern-java.pdf

    处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...

    策略模式(Java)

    通过两个经典的例子解析策略模式的内涵,让你更加深入了解策略模式的魅力

    策略模式的实现,通过反射

    策略模式代码,两种方式实现,第一种,通过map存储方式,第二种,通过配置文件加反射方式

    设计模式之策略模式Java实现和类设计图

    设计模式之装饰模式Java实现和UML类设计图

    java设计模式-策略模式

    此代码简单的模拟了超市的促销策略,有打折、返钱等操作!针对商场中出现的各种各样的促销策略,很方便的便可实现策略的拓展!

    JAVA策略模式实现

    这是一个基于JAVA的策略设计模式。松耦合,可扩展

    java设计模式之策略模式实现源码

    java设计模式之策略模式实现源码

    【设计模式】策略模式Demo(java代码)

    【设计模式】策略模式demo,用java实现的,简单易懂,亲测有效

    strategy(策略模式Java代码实现).rar

    strategy(策略模式Java代码实现)

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - ...

    设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板.pptx

    logo 13策略模式:接口和多个实现策略模式:接口和多个实现 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第14页。 logo 14模板方法模式:抽象类定义final方法模板方法模式:抽象类...

    Java设计模式-策略模式

    Java设计模式,策略模式的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂

    23种设计模式的java实现

    23种设计模式的java实现。创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 工厂方法 http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html 建造者模式 ...

    体系结构学习代码!特别详细丰富

     【附加例6.2】二手车拍卖系统的非MVC设计与实现-两个类的情况 2. 教材各章实例代码 包括书中各章实例的Java源程序代码 (共46组),列表如下。 (1)上篇:软件设计模式例子代码  【例2.2】简单工厂方法模式-...

    java 策略模式实例(duck)

    策略模式例子,纯代码,copy后即可运行; 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中...

    Android代码-java-bible

    什么是策略模式 Java8系列 Java8简明教程 Java8 Foreach Hexo搭建博客 分分钟部署一个Hexo环境 各种配置详解 开始写作吧 开发者指南 git - 简明指南 Jersey-2.x用户指南 REST 实战 Java Servlet 3.1 规范 ...

    策略模式 java 实现冒泡、快排、归并三种算法

    用java实现策略模式,strategy Patten,使用三种不同的排序算法实现策略模式,可执行代码,可直接读取文件中需要排序的数据

Global site tag (gtag.js) - Google Analytics