`

HeadFirst设计模式学习笔记((JAVA版)鸭子与策略(Strategy)模式

阅读更多

HeadFirst设计模式学习笔记((JAVA版)鸭子与策略(Strategy)模式

原文转自:http://www.cnblogs.com/nokiaguy/archive/2009/02/11/1388168.html

策略模式的设计原则如下:

    1.  将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。

    2.  应针对接口,而不是类进行编程。

    3.  在类中应多用组合,少用继承。

    例子:

    我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为:

    1.  display

    2.  swim

    3.  fly(飞)

    4.  quack(叫)

    其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方法。fly和quack并不是所有鸭子的特性,如橡皮鸭子即不会飞,也不会叫。因此,可以将这两个方法看作是两个行为,可将每一个行为设计成一个接口。这样可以和Duck类完全脱离。因为,fly和quack与Duck一点关系都没有(别的东西也可能fly和quack),然后不同的fly和quack分别用实现相应接口的类表示。

    下面是关于Duck的完整代码:

fly行为
  //  飞行接口
    public interface FlyBehavior {
	public void fly();
}
    //  飞
    public class FlyWithWings implements FlyBehavior {
	public void fly() {
		System.out.println("正在用翅膀飞行");
	}
}
    //  不飞
    public class FlyNoWay implements FlyBehavior {
	public void fly() {
		System.out.println("不会飞");
	}
}
//坐火箭飞
public class FlyRocketPowered implements FlyBehavior {
	public void fly() {
		System.out.println("坐火箭飞");
	}
}



quack行为
    //  叫接口
    public interface QuackBehavior {
	public void quack();
}
    // 嘎嘎叫
    public class Quack implements QuackBehavior {
	public void quack() {
		System.out.println("嘎嘎叫");
	}
}
    //  吱吱叫
    public class Squeak implements QuackBehavior {
	public void quack() {
		System.out.println("吱吱叫");
	}
}
    //  不叫
    public class MuteQuack implements QuackBehavior {
	public void quack() {
		System.out.println("不会叫");
	}
}


实现Duck类
//  鸭子超类
    public abstract class Duck {
         //  默认的行为
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
 
	public Duck() {
	}
 
	public void setFlyBehavior (FlyBehavior fb) {
		flyBehavior = fb;
	}
 
	public void setQuackBehavior(QuackBehavior qb) {
		quackBehavior = qb;
	}
 
	abstract void display();
 
	public void performFly() {
		flyBehavior.fly();
	}
 
	public void performQuack() {
		quackBehavior.quack();
	}
 
	public void swim() {
		System.out.println("正在游泳~~");
	}
}



建立不同的鸭子类

 //  野鸭
    public class MallardDuck extends Duck {
 
	public MallardDuck() {
 
		quackBehavior = new Quack();
                flyBehavior = new FlyWithWings();
 

	}
 
	public void display() {
		System.out.println("绿头鸭");
	}
}
    //  红头鸭
    public class RedHeadDuck extends Duck {
 
	public RedHeadDuck() {
		flyBehavior = new FlyWithWings();
		quackBehavior = new Quack();
	}
 
	public void display() {
		System.out.println("红头鸭");
	}
}
    //  橡皮鸭
   public class RubberDuck extends Duck {
 
	public RubberDuck() {
		flyBehavior = new FlyNoWay();
		quackBehavior = new Squeak();
	}
 
	public void display() {
		System.out.println("橡皮鸭");
	}
}
    //模型鸭
public class ModelDuck extends Duck {
	public ModelDuck() {
		flyBehavior = new FlyNoWay();
		quackBehavior = new Quack();
	}

	public void display() {
		System.out.println("模型鸭");
	}
}





调用代码如下:
public class MiniDuckSimulator {
 
	public static void main(String[] args) {
 
		MallardDuck	mallard = new MallardDuck();
		RubberDuck	rubberDuckie = new RubberDuck();
		RedHeadDuck	redHeadDuck = new RedHeadDuck();
 
		ModelDuck	model = new ModelDuck();

		mallard.performQuack();
		rubberDuckie.performQuack();
		redHeadDuck.performQuack();
   
		model.performFly();	
		model.setFlyBehavior(new FlyRocketPowered());
		model.performFly();
	}
}
  • 大小: 85.4 KB
分享到:
评论
1 楼 浪客剑心 2010-04-27  
呵呵 书上的的完整例子!

相关推荐

    Head First 设计模式 +Java设计模式(第2版)

    《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...

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

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

    HeadFirst设计模式学习笔记

    《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...

    笔记_HeadFirst设计模式.pdf

    笔记_HeadFirst设计模式

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    Head First设计模式(完整高清版).pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特且易于理解的方式介绍了设计模式这一复杂的概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助我们编写更灵活、可维护和可...

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...

    head first 设计模式 高清中文版 pdf 第二部分

    head first 设计模式 高清中文版 pdf

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...

    HeadFirst设计模式(中文版)高清版 第二部分

    HeadFirst设计模式(中文版)高清版 第二部分

    Head First 设计模式 中文完整版+附书源码

    Head First 设计模式(中文完整版+附书源码 c# java Head First 设计模式(中文版) pdf 《Head First 设计模式》附书源码 《Head First 设计模式》附书源码(C#版) zip 《Head First 设计模式》附书源码(Java版)...

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...

    HeadFirst设计模式Java语言中文版附源码

    《HeadFirst设计模式Java语言中文版附源码》是一本专为Java程序员设计的经典学习资料,旨在帮助读者轻松掌握设计模式这一重要的编程概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,能够提升代码...

    head first 设计模式 高清完整版 pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特、生动的方式讲解了设计模式这一核心的软件工程概念。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    《Head.First设计模式》书中源代码(Java语言)

    《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...

    Head First 设计模式 JAVA源码

    《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First设计模式中文版PDF完整版.rar

    重视大脑的学习指南Head First设计模式,学习为何朋友们对工厂模式的认知可能有错,把事关紧要的模式直接装入脑海里,发掘模式大师的秘密,避免一些尴尬的错误,探究星巴兹咖啡如何以装饰者模式让自己的股价翻倍。

    HeadFirst 设计模式java源代码

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、...

Global site tag (gtag.js) - Google Analytics