`
jiq408694711
  • 浏览: 36624 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

行为型-策略模式

 
阅读更多
package strategy;
/**
 * @author jiq
 * 类型:Behavioral
 * 模拟各种鸭子,会有用,呱呱叫,有的会飞,有的不会等...
 * 继承并不总是好的选择。
 * **************************************************
 * 策略模式定义:
 * 	定义一个算法簇,分别封装起来,让他们之间可以相互替换,
 * 	此模式让算法的变化独立于使用算法的客户。
 * **************************************************
 * 遵守的OO设计原则:
 * 	Change:不管设计的多好,软件总会演化。
 * (1)原则1:找出可能需要变化的部分,把他们与那些固定不变的部分分离开来;
 * 		假设鸭子可能的行为有游泳,叫,飞,以及显示自己的描述,并且所有鸭子都一定会
 * 		游泳,显示自己的描述,但是有的鸭子可能不会飞,比如橡皮鸭,或者有的不i会叫,
 * 		或者叫的方式不一样等等,这些属于变化的部分。
 * (2)原则2:针对接口编程,而不是针对实现编程。
 * (3)原则3:多用组合,少用继承。
 * 		各种变化的行为FlyBehavior和QuackBehavior等组合到具体的鸭子类中,
 * 		可以在运行时动态改变鸭子的各种行为的同时,方便鸭子进行拓展。
 * ********************************************************************
 * 		这些动态变化的部分(FlyBehavior和QuackBehavior等)组合到鸭子类中,
 * 		可以吧这样的“一组行为”想象成“一簇算法”,这就是策略模式名称的由来。
 * ********************************************************************
 */
/**
 * 鸭子类固定的部分
 * */
abstract class Duck{
	/**
	 * 算法簇(组合)/一组行为
	 * */
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public abstract void display();
	
	public void swim(){
		System.out.println("All duck can swim!");
	}
	
	/**
	 * 提供动态改变鸭子行为的接口
	 * */
	public void setFlyBehavior(FlyBehavior f){
		this.flyBehavior = f;
	}
	
	public void setQuackBehavior(QuackBehavior q){
		this.quackBehavior = q;
	}
	
	/**
	 * 变化的部分委托给行为类
	 * */
	public void performFly(){
		flyBehavior.fly();
	}
	
	public void performQuack(){
		quackBehavior.quack();
	}
}

/**
 * 变化的部分(算法簇)
 * */
interface FlyBehavior{
	public void fly();
}

interface QuackBehavior{
	public void quack();
}
//////////////////////////////////////////////////
/*
 * 各种鸭子
 * */
class BeiJingDuck extends Duck{
	public void display() {
		System.out.print("I am a delicious Duck\n");		
	}
}

class NanJingDuck extends Duck{
	public void display() {
		System.out.print("I am a inteligent Duck\n");		
	}	
}
/*
 * 各种行为
 * */
class FlyWithWings implements FlyBehavior{
	public void fly() {
		System.out.println("i fly so Slow");
	}
}

class FlyRocketPowered implements FlyBehavior{
	public void fly() {
		System.out.println("i can fly faster than rocket");
	}	
}

class FemaleQuack implements QuackBehavior{
	public void quack() {
		System.out.println("i can quack, but not loud");
	}	
}
/**
 * 运行时动态改变鸭子行为
 * 这些鸭子都是很容易拓展的
 * 可以加入各种各样的不同的一组行为(算法簇)而不影响现有的东东
 * 各种具体的行为(飞行)可以被替换成不同的具体行为(飞行)。
 * */
public class DuckSimulator {
	public static void main(String[] args) {
		NanJingDuck nd = new NanJingDuck();

		/* 创建一支南京鸭,只能慢慢飞,像母鸭子那么叫 */
		nd.setFlyBehavior(new FlyWithWings());
		nd.setQuackBehavior(new FemaleQuack());
		nd.display();
		nd.performFly();
		nd.performQuack();
		
		/* 突然有一天看到一支很帅很帅的鸭子,然后交配 */
		//... do something you should not to see
		
		/* 突然就变得可以像火箭那么牛逼滴飞了 */
		nd.setFlyBehavior(new FlyRocketPowered());
		nd.performFly();
		nd.performQuack();
	}
}

分享到:
评论

相关推荐

    JAVA-设计模式-行为型模式-策略模式

    JAVA-设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    java常用设计模式-策略模式

    策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口和多个实现该接口的类...

    (行为型模式) Strategy 策略模式

    C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载

    02-设计模式之策略模式.pdf

    策略模式是软件设计模式中的一种行为型模式,主要用于处理一系列算法(策略)的选用和切换问题。在策略模式中,不同的算法被封装成策略类,它们之间可以互换使用,而且这些算法类都实现了一个共同的策略接口。客户端...

    简单工厂模式-策略模式-反射源码下载

    策略模式则是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用它的客户。在Java中,我们可以定义一个策略接口,然后创建多个实现该接口的具体策略...

    L14-设计模式-行为型模式v21

    行为型模式 行为型模式(Behavioral Patterns)是设计模式的一种,关注对象行为功能上的抽象,从而提升对象在行为功能上的可拓展性,能以最少的代码变动完成功能的增减。 在设计模式中,行为型模式主要包括以下几...

    设计模式_行为型_策略模式.md

    策略模式(Strategy Pattern)属于设计模式中行为型模式的一种。它的目的是定义一系列算法,并将每一个算法封装起来,使它们之间可以互换,且算法的变化不会影响使用算法的客户。策略模式让算法独立于使用它的客户端...

    java---------设计模式

    - 策略模式:定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。 - 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 以上这些设计模式在实际开发中有着广泛的应用,...

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C#中,策略模式经常被用来解决复杂的问题,特别是在需要动态切换算法或行为的场景下。它通过将算法封装到具有独立接口的类中,使得算法可以互相替换...

    Java-设计模式.zip

    - 策略模式:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的使用方式。 - 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法...

    c#设计模式 行为型模式 实验报告+源代码

    c#设计模式 行为型模式 包括8个设计模式的实验报告+源代码。实验报告包括实验类图和个人总结的一些小技巧,源代码。包括:职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略...

    design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip

    本压缩包"design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip"提供了全面的设计模式学习资源,适用于初学者和有经验的开发者,帮助他们提升软件设计能力。...

    人人都会设计模式---策略模式--Strategy

    【策略模式】是一种设计模式,它的核心思想是将不同的算法或行为封装成独立的类,这些类具有统一的接口,从而使客户端可以灵活地选择并使用其中的任何一种算法,而无需关心具体实现的细节。这种模式可以有效地避免...

    设计模式-创建型模式、结构型模式和行为型模式

    1. **策略模式**: - **简介**:定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。 - **应用场景**:当一个系统需要根据不同条件选择不同的算法或行为时。 - **优点**:使得算法可独立于使用它的...

    行为型模式(Behavioral)之策略模式

    策略模式是一种行为设计模式,它的主要目的是在代码中定义一系列算法,并将每个算法封装成一个独立的类,使得它们可以互相替换。这种模式允许我们根据不同的情况或需求选择不同的算法,而无需更改调用算法的代码。...

    软件体系结构实验报告--设计模式2

    策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。在程序中,策略模式可以避免使用条件语句,使得代码更加简洁,更易于扩展...

    Python 程序语言设计模式思路-行为型模式:策略模式:将算法封装成独立的类,并使它们可以互相替换及支付模式数据压缩

    策略模式(Strategy Pattern)是一种行为型设计模式,旨在将算法封装成独立的类,并使它们可以互相替换。这种模式使得算法的变化独立于使用算法的客户端,从而提供了灵活性和可扩展性。策略模式常用于需要在运行时...

    C#面向对象设计模式纵横谈\23 行为型模式Strategy策略模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式

Global site tag (gtag.js) - Google Analytics