`
liu_android_1002
  • 浏览: 9406 次
  • 性别: 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

    ### 策略模式-java #### 模式定义与背景 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户端而变化。简而言之,这种模式允许你在运行时改变对象的行为。策略模式的核心思想是将算法或者行为封装成一...

    设计模式-Java语言中的应用

    在Java中,策略模式常用于实现策略接口,让策略对象决定执行哪种算法,从而提高了代码的可扩展性和可维护性。 此外,书中还会深入探讨如何在Java中实现这些模式,包括如何利用Java的面向对象特性,如继承、封装和...

    设计模式-java实现代码样例

    本资源包含了一系列设计模式的Java实现代码样例,通过学习这些样例,可以深入理解并掌握设计模式的精髓。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。Java中实现单例模式有多种方式,如饿汉...

    设计模式--策略模式java例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常...在压缩包文件"StrategyPatterns例子"中,你可以找到使用Java实现策略模式的示例代码,这将有助于进一步理解策略模式的运用。

    55-Java设计模式之策略模式与状态模式1

    需要注意的是,策略模式和状态模式虽然看起来很相似,但它们的应用场景和实现方式是不同的。策略模式主要用于解决系统与第三方接口进行数据交互的问题,而状态模式主要用于解决状态转换的问题。同时,策略模式需要...

    策略模式(Java)

    在Java中,策略模式通常通过定义接口和实现这些接口的具体策略类来实现。这种模式遵循面向对象设计原则,如单一职责原则和开闭原则,即对扩展开放,对修改关闭。 策略模式的基本结构包括以下几个部分: 1. **策略...

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

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

    java设计模式-策略模式

    在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...

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

    在Java中,策略模式通常用于将算法封装到不同的类中,使得可以根据需要动态选择并应用这些算法。本示例将详细介绍如何通过两种方法实现策略模式:一种是通过Map存储方式,另一种是通过配置文件加反射方式。 首先,...

    设计模式-Java语言中的应用(pdf)

    行为型模式如策略(Strategy)、观察者(Observer)、访问者(Visitor)和模板方法(Template Method),关注对象之间的交互和职责分配。 在Java中,设计模式的应用广泛且深入。例如,单例模式在系统配置、线程池等...

    设计模式--Java语言版本

    10. **策略模式**:定义一系列的算法,并将每个算法封装起来,使它们可以互相替换。Java中的Comparator接口就是一个策略的实例。 11. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。在...

    设计模式--java版.rar

    文件“java1.doc”可能包含了对这些设计模式的详细解析,包括它们的定义、用途、优缺点以及如何在Java代码中实现。通过阅读这份文档,开发者可以更好地理解如何在实际项目中应用这些模式,提高代码的可读性和可维护...

    JAVA策略模式实现

    在"JAVA策略模式实现"的例子中,我们可能会有一个`Strategy`接口或抽象类,它定义了一组通用的操作,例如处理邮件的策略。然后,我们可以创建多个具体的策略类,如`SimpleMailStrategy`、`PriorityMailStrategy`和`...

    策略模式-电影订票程序

    在Java或类似的面向对象编程语言中,策略模式通常包含以下组件: 1. **策略接口(Strategy Interface)**:定义了所有支持的策略所共有的公共接口。在电影订票程序中,这个接口可能名为`TicketPricingStrategy`,...

    Java设计模式教程-策略模式Java开发Java经验技

    在"Java设计模式教程——策略模式Java开发Java经验技巧共13页.pdf.zip"这份资料中,可能会详细讲解如何在实际项目中应用策略模式,包括但不限于以下内容: 1. 策略模式的基本结构和工作原理。 2. 如何定义策略接口...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    17. **策略模式**:定义了一系列的算法,并将每一个算法封装起来,使得它们可以相互替换。策略模式让算法的变化独立于使用它的客户。Java中的Comparator接口允许根据不同的策略比较对象。 18. **状态模式**:允许一...

    design-pattern-java_设计模式_

    《设计模式:Java实现》 设计模式是软件工程中的一种最佳实践,它是针对特定问题的解决方案,已经被广泛接受并应用于各种编程语言中,包括Java。这些模式来自于经验丰富的软件开发者的智慧结晶,它们提供了一种在...

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

    在Java实现策略模式时,首先我们需要定义策略接口。例如: ```java public interface Strategy { void execute(); } ``` 然后创建具体策略类,比如`ConcreteStrategyA`、`ConcreteStrategyB`,它们分别实现策略...

    java设计模式--策略模式

    策略模式是Java设计模式中的一种行为模式,它允许在运行时选择算法或策略,从而提供了更大的灵活性。在HeadFirst的《设计模式》一书中,第一章深入浅出地讲解了这一模式,通过实例帮助读者理解其核心概念和应用场景...

Global site tag (gtag.js) - Google Analytics