`
kangsg219
  • 浏览: 123676 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

学习笔记之策略模式

阅读更多
策略(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!");

	}

}

分享到:
评论
2 楼 bomb2121 2008-01-07  
老弟,做的不错哈。不过要能多加上一点你自己的想法就更好了。
策略模式:在spring中最是常用的。看看spring对各个层面中提供的集成多种框架的能力就知道了:)
1 楼 kangsg219 2007-10-19  
代码来自《Head First 设计模式》

相关推荐

    HeadFirst 设计模式学习笔记1--策略模式Demo

    《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    javascript设计模式之策略模式学习笔记.docx

    ### JavaScript设计模式之策略模式详解 #### 一、策略模式简介 策略模式是一种行为型设计模式,它定义了一系列可互换的算法,并将这些算法封装在独立的对象中,以便于在运行时根据需要进行选择和替换。这种模式有助...

    23种设计模式学习笔记

    14. **策略模式**:定义一系列算法,并将每个算法封装起来,使它们可以互相替换。让算法独立于使用它的客户。 15. **状态模式**:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 16. **职责...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    java学习笔记及设计模式

    9. **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 通过学习这些设计模式,开发者能够更好地理解和应用软件设计原则,提高代码的复用性和可...

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    设计模式学习笔记

    在本学习笔记中,我们将重点关注“策略模式”。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许我们定义一系列算法,并将每一个算法封装起来,使得它们可以相互替换,同时让算法的变化...

    学习笔记之商业模式新生代.pptx

    【商业模式新生代】是由瑞士的亚历山大·奥斯特瓦德和比利时的伊夫·皮尼厄共同著作的一本商业策略书籍,该书详细介绍了如何理解和构建创新的商业模式。这本书于2012年由机械工业出版社出版,适用于对商业模式感兴趣...

    C#设计模式学习笔记

    以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...

    A管理模式学习笔记 企业管理模式探索

    【A管理模式学习笔记 企业管理模式探索】 A管理模式是一种先进的企业管理理念,旨在提升企业运营效率,优化内部流程,强化组织架构,以及塑造独特的企业文化。在深入理解A管理模式的过程中,我们首先需要关注的是...

    《深入浅出设计模式》读书笔记--策略模式与三个设计原则

    在本文中,我们将重点关注策略模式以及它与三个核心设计原则的关系。策略模式是一种行为设计模式,它使你能在运行时选择算法或策略。这种模式允许我们在不改变对象结构的情况下,替换算法,增加了代码的灵活性和可...

    人工智能个人学习笔记

    【人工智能个人学习笔记】 在当今的信息时代,人工智能(AI)已成为科技发展的重要推动力,它涵盖了机器学习、深度学习、自然语言处理等多个领域。这份"人工智能个人学习笔记"旨在帮助我们深入了解这一前沿技术,让...

    学习笔记-深入浅出设计模式

    在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    Head.First 设计模式学习笔记.pdf

    ### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...

    300Java设计模式部分学习笔记

    7. 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 8. 模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 9...

Global site tag (gtag.js) - Google Analytics