策略模式: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计原则: 多用组合,少用继承。
设计一个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语言实现 信息系统分析与设计
策略模式通过定义一组可互换的算法(即策略),将每个算法封装成相应的策略类。这样客户端可以根据需要选择不同的策略,并且能够灵活地切换和扩展策略,而不需要修改原有的代码逻辑。策略模式能够提高代码的灵活性、...
处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...
通过两个经典的例子解析策略模式的内涵,让你更加深入了解策略模式的魅力
策略模式代码,两种方式实现,第一种,通过map存储方式,第二种,通过配置文件加反射方式
设计模式之装饰模式Java实现和UML类设计图
此代码简单的模拟了超市的促销策略,有打折、返钱等操作!针对商场中出现的各种各样的促销策略,很方便的便可实现策略的拓展!
这是一个基于JAVA的策略设计模式。松耦合,可扩展
java设计模式之策略模式实现源码
【设计模式】策略模式demo,用java实现的,简单易懂,亲测有效
strategy(策略模式Java代码实现)
策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - ...
logo 13策略模式:接口和多个实现策略模式:接口和多个实现 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第14页。 logo 14模板方法模式:抽象类定义final方法模板方法模式:抽象类...
Java设计模式,策略模式的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
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】简单工厂方法模式-...
策略模式例子,纯代码,copy后即可运行; 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中...
什么是策略模式 Java8系列 Java8简明教程 Java8 Foreach Hexo搭建博客 分分钟部署一个Hexo环境 各种配置详解 开始写作吧 开发者指南 git - 简明指南 Jersey-2.x用户指南 REST 实战 Java Servlet 3.1 规范 ...
用java实现策略模式,strategy Patten,使用三种不同的排序算法实现策略模式,可执行代码,可直接读取文件中需要排序的数据