`
xuningxiaoni
  • 浏览: 33645 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

策略模式类图和代码实例

阅读更多
在Duck类中我把它设计成了一个abstract类为的就是把Duck类中的共用方法也abstract出来,所有的继承Duck类都要实现这个abstract方法,另外还放入了两个接口,分另表示会飞和会叫的如:
public abstract class Duck {

FlyBehavior flyBehavior;

QuackBehavior quackBehavior;

public abstract void display();

public void performFly() {
flyBehavior.fly();
}

public void performQuack() {
quackBehavior.quack();
}

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

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{

public void fly() {
System.out.println("I can't flying");
}

}


public class FlyWithWings implements FlyBehavior{

public void fly() {
System.out.println("I can flying");
}

}


public class Quack implements QuackBehavior{

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

}

public class Squack implements QuackBehavior{

public void quack() {
System.out.println("Squack");
}

}

public class MuteQuack implements QuackBehavior{

public void quack(){
System.out.println("MuteQuack");
}
}

public class FlyRocketPowerd implements FlyBehavior{

public void fly(){
System.out.println("I'm flying with Rocket!");
}

}


public class MallerdDuck extends Duck{

public void display(){
System.out.println("I'm a real Mallar Duck");
}

public MallerdDuck(){
flyBehavior = new FlyWithWings();
quackBehavior = new MuteQuack();
}

}


public class ModelDuck extends Duck{

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



public ModelDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
}


public class Test {

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

Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowerd());
model.performFly();

}

}
这样就可以通过为接口设置不同的实现类,从而达到动态调用的目的。设计原则多组合,少继承。


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


设计原则:
       1. 找出程序中会变化的方面,然后将其和固定不变的地方相分离。2.针对接口编程,不针对实现编程。3.多用组合,少用继承。4.类应该对扩展开放,对修改关闭。
  • 大小: 10.9 KB
分享到:
评论

相关推荐

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    策略模式允许在运行时选择算法或策略,使得代码更加灵活。在手机加工厂中,不同的手机可能有不同的生产策略,如高端手机可能采用更严格的质检流程,而低端手机则可能简化一些步骤。通过策略模式,我们可以定义一系列...

    设计模式(介绍+代码+部分类图)

    行为型模式则关注对象之间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、职责链模式(Chain of ...

    java 设计模式类图

    UML类图中,策略模式通常包含一个策略接口和实现此接口的具体策略类。在Java中,策略接口是IStrategy,有策略类StrategyA、StrategyB、StrategyC实现IStrategy接口,还有一个上下文类Model::StrategyContext使用策略...

    Java23种设计模式源码+案例分析+类图

    16. 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的执行策略。 17. 命令模式(Command):将请求封装为一个对象,从而使你可用不同的请求对客户进行...

    《设计模式实训教程》【PPT+类图与代码+样章】

    5.2.9策略模式实例之电影票打折 5.2.10模板方法模式实例之数据库操作 5.2.11访问者模式实例之奖励审批 5.3实训练习 第6章模式联用与综合实例实训 6.1设计模式补充知识 6.1.1反射与配置文件 6.1.2GRASP模式 ...

    常见设计模式代码及类图

    本资源包“常见设计模式代码及类图”包含了多种常用的设计模式的实现和类图解析,以下是对这些模式的详细讲解: 1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。在代码中,你可以看到如何...

    设计模式(含ppt,类图设计,java实例)

    行为型模式则着重于对象之间的责任分配,如观察者模式、策略模式和模板方法模式。 类图设计部分,通过UML(统一建模语言)的类图,可以清晰地展示各个类之间的关系,包括类的属性、方法以及类与类之间的关联、继承...

    Head First 之策略模式源码

    《Head First 之策略模式源码》是一份深入解析策略模式的编程学习资源,它以Head First系列的易懂风格,结合源代码实例,帮助读者理解并掌握这一设计模式。策略模式是软件工程中的一种行为设计模式,它使你能在运行...

    设计模式实训教程ppt+类图+代码

    8. 策略模式(Strategy):定义一组可互换的策略,使得算法可以在运行时选择合适的策略实例。 9. 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个...

    设计模式实训教程代码和类图

    策略模式(Strategy)定义一组可相互替换的算法,并使它们可以互换;模板方法模式(Template Method)定义了算法的骨架,而将一些步骤延迟到子类中;以及访问者模式(Visitor)允许在不改变类结构的情况下增加新的...

    设计模式源码与类图分析1

    5. "Client.java":客户端代码,即应用程序的主要部分,它使用Context和Strategy接口来实例化并调用具体的策略,从而实现对算法的动态选择。 通过分析这些文件,我们可以深入理解策略模式的工作原理,它是如何允许...

    23种经典设计模式UML类图汇总

    22. **策略模式**:定义一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略使算法的变化独立于使用它的客户端。UML类图包括策略接口和多个具体策略类。 23. **模板方法模式**:定义一个操作中的算法...

    设计模式每个模式类图.zip

    在这个“设计模式每个模式类图.zip”压缩包中,我们很显然能看到每种设计模式对应的类图,这对于理解和应用这些模式非常有帮助。 首先,让我们逐一探讨设计模式中的主要类别: 1. 创建型模式:这类模式关注对象的...

    java 23种设计模式的类图

    21. **策略模式(Strategy)**:定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。使得算法的变化独立于使用它的客户。 22. **模板方法模式(Template Method)**:定义一个操作中的算法骨架,而...

    24种设计模式的类图[rar.jpg]

    策略模式的类图会突出策略接口和实现策略的具体类。 对于Java开发者来说,理解这些设计模式并能熟练地在项目中应用是非常重要的。设计模式提供了良好的代码结构,提高了代码的可读性和可维护性,同时也让团队成员...

    设计模式23种类图

    - 策略模式(Strategy):定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式(Visitor)...

    JAVA设计模式类图(免费高清)

    在探讨《JAVA设计模式类图(免费高清)》这一资源时,我们首先需要明确几个核心概念:设计模式、UML图以及它们在Java开发中的应用。该资源通过一系列高清图表,详细介绍了23种常见的Java设计模式,为开发者提供了一...

    设计模式代码(包含uml类图、和实验报告)

    - **策略模式**(Strategy):定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。 - **命令模式**(Command):将请求封装为一个对象,以便使用不同的请求、队列请求或者支持可撤销的操作。 - **观察...

Global site tag (gtag.js) - Google Analytics