策略(Strategy)模式:定义了算法族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户。属于设计模式中对象行为型模式。
下面看代码:
抽象类Duck.java
package org.kangsg219.abst;
import org.kangsg219.intf.FlyBehavior;
import org.kangsg219.intf.QuackBehavior;
public abstract class Duck {
public FlyBehavior flybehavior;
public QuackBehavior quackbehavior;
public Duck(){
}
public abstract void display();
public void performFly(){
flybehavior.fly();
}
public void setFlybehavior(FlyBehavior flybehavior) {
this.flybehavior = flybehavior;
}
public void setQuackbehavior(QuackBehavior quackbehavior) {
this.quackbehavior = quackbehavior;
}
public void performQuack(){
quackbehavior.quack();
}
public void swim(){
System.out.println("All ducks float,even decoys!");
}
}
duck具备两个行为:飞和叫;先分别定义接口再实现
package org.kangsg219.intf;
public interface FlyBehavior {
public void fly();
}
package org.kangsg219.intf;
public interface QuackBehavior {
public void quack();
}
package org.kangsg219.impl;
import org.kangsg219.intf.FlyBehavior;
public class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("I can't fly!");
}
}
package org.kangsg219.impl;
import org.kangsg219.intf.FlyBehavior;
public class FlyWithRocket implements FlyBehavior {
public void fly() {
System.out.println("I'm flying whit rocket!");
}
}
package org.kangsg219.impl;
import org.kangsg219.intf.FlyBehavior;
public class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("I'm flying with wings!");
}
}
package org.kangsg219.impl;
import org.kangsg219.intf.QuackBehavior;
public class MuteQuack implements QuackBehavior {
public void quack() {
System.out.println("<silence>");
}
}
package org.kangsg219.impl;
import org.kangsg219.intf.QuackBehavior;
public class Quack implements QuackBehavior {
public void quack() {
System.out.println("Quack......");
}
}
package org.kangsg219.impl;
import org.kangsg219.intf.QuackBehavior;
public class Squeak implements QuackBehavior {
public void quack() {
System.out.println("Squeak......");
}
}
看看效果
package org.kangsg219.test;
import org.kangsg219.abst.Duck;
import org.kangsg219.impl.FlyWithWings;
import org.kangsg219.impl.Quack;
public class MallardDuck extends Duck {
public MallardDuck(){
quackbehavior=new Quack();
flybehavior=new FlyWithWings();
}
@Override
public void display() {
System.out.println("I'm a real mallard duck!");
}
}
package org.kangsg219.test;
import org.kangsg219.abst.Duck;
import org.kangsg219.impl.FlyWithRocket;
import org.kangsg219.impl.Quack;
public class MiniDuckSimulator {
public static void main(String[] args) {
System.out.println("mallard duck********************");
Duck mallard=new MallardDuck();
mallard.performFly();
mallard.performQuack();
mallard.swim();
mallard.display();
System.out.println("modle duck********************");
Duck modle=new ModleDuck();
modle.setFlybehavior(new FlyWithRocket());
modle.setQuackbehavior(new Quack());
modle.performFly();
modle.performQuack();
modle.swim();
modle.display();
}
}
package org.kangsg219.test;
import org.kangsg219.abst.Duck;
public class ModleDuck extends Duck {
@Override
public void display() {
System.out.println("I'm a modle duck!");
}
}
分享到:
相关推荐
《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
### JavaScript设计模式之策略模式详解 #### 一、策略模式简介 策略模式是一种行为型设计模式,它定义了一系列可互换的算法,并将这些算法封装在独立的对象中,以便于在运行时根据需要进行选择和替换。这种模式有助...
14. **策略模式**:定义一系列算法,并将每个算法封装起来,使它们可以互相替换。让算法独立于使用它的客户。 15. **状态模式**:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 16. **职责...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
9. **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 通过学习这些设计模式,开发者能够更好地理解和应用软件设计原则,提高代码的复用性和可...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
在本学习笔记中,我们将重点关注“策略模式”。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许我们定义一系列算法,并将每一个算法封装起来,使得它们可以相互替换,同时让算法的变化...
【商业模式新生代】是由瑞士的亚历山大·奥斯特瓦德和比利时的伊夫·皮尼厄共同著作的一本商业策略书籍,该书详细介绍了如何理解和构建创新的商业模式。这本书于2012年由机械工业出版社出版,适用于对商业模式感兴趣...
以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...
【A管理模式学习笔记 企业管理模式探索】 A管理模式是一种先进的企业管理理念,旨在提升企业运营效率,优化内部流程,强化组织架构,以及塑造独特的企业文化。在深入理解A管理模式的过程中,我们首先需要关注的是...
在本文中,我们将重点关注策略模式以及它与三个核心设计原则的关系。策略模式是一种行为设计模式,它使你能在运行时选择算法或策略。这种模式允许我们在不改变对象结构的情况下,替换算法,增加了代码的灵活性和可...
【人工智能个人学习笔记】 在当今的信息时代,人工智能(AI)已成为科技发展的重要推动力,它涵盖了机器学习、深度学习、自然语言处理等多个领域。这份"人工智能个人学习笔记"旨在帮助我们深入了解这一前沿技术,让...
在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...
7. 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 8. 模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 9...