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

《head first》学习笔记之一

阅读更多
《head first》学习笔记
设计原则

第一个设计原则:
找出应用中可能需要变化之处,把他们独立出来“封装”,不要和那些不需要变化的代码混在一起。
如:将Duck类的fly()和quack()行为独立出来。

第二个设计原则:
针对接口编程,而不是针对实现编程。
将fly和quack分别设计成接口,Duck类不用实现该接口,而是由单独制造其他类专门实现接口,这个类称为“行为类”由行为类而不是Duck类来实现行为接口。

package net.roky.pattern.first;

public interface FlyBehavior {
	public void fly();
}

package net.roky.pattern.first;

public class Fly1 implements FlyBehavior {
	public void fly(){
		System.out.println("I can fly with wings.");
	}
}

package net.roky.pattern.first;

public class Fly2 implements FlyBehavior {
	public void fly() {
		System.out.println("I can't fly.");
	}
}

package net.roky.pattern.first;

public class Fly3 implements FlyBehavior {

	public void fly() {
		System.out.println("I can fly with rocket.");

	}

}

package net.roky.pattern.first;

public interface QuackBehavior {
	public void quack();
}

package net.roky.pattern.first;

public class Quack1 implements QuackBehavior {

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

}

package net.roky.pattern.first;

public class Quack2 implements QuackBehavior{
	public void quack(){
		System.out.println("gugu...gugu...");
	}
}

package net.roky.pattern.first;

public abstract class Duck {
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public void setFlyBehavior(FlyBehavior f){
		this.flyBehavior = f;
	}
	
	public void setQuackBehavior(QuackBehavior q){
		this.quackBehavior = q;
	}
	
	public abstract void display();
	
	public void swim(){
		System.out.println("I'm a duck, I can swim.");
	} 
	
	public void performFlyBehavior(){
		flyBehavior.fly();
	}
	
	public void performQuackBehavior(){
		quackBehavior.quack();
	}
}

package net.roky.pattern.first;

public class Duck1 extends Duck{
	public Duck1(){
		System.out.println("Duck1....................");
		super.flyBehavior = new Fly1();
		super.quackBehavior = new Quack2();
	}
	
	public void display(){
		System.out.println("------Duck1");
	}
}

package net.roky.pattern.first;

public class Duck2 extends Duck {
	
	public Duck2(){
		System.out.println("Duck2....................");
		super.flyBehavior = new Fly2();
		super.quackBehavior = new Quack1();
	}

	public void display() {
		System.out.println("------Duck2");
	}

}

package net.roky.pattern.first;

public class Main {
	public static void main(String[] args){
		Duck duck = new Duck1();
		duck.swim();
		//在构造器中设置对象
		duck.performFlyBehavior();
		duck.performQuackBehavior();
		
		//使用setXXX方法设置对象
		duck.setFlyBehavior(new Fly2());
		duck.setQuackBehavior(new Quack2());
		duck.performFlyBehavior();
		duck.performQuackBehavior();
		
		duck = new Duck2();
		duck.swim();
		//在构造器中设置对象
		duck.performFlyBehavior();
		duck.performQuackBehavior();
		//使用setXXX方法设置对象
		duck.setFlyBehavior(new Fly3());
		duck.setQuackBehavior(new Quack1());
		duck.performFlyBehavior();
		duck.performQuackBehavior();
		
	}
}

  • 大小: 14.5 KB
1
1
分享到:
评论

相关推荐

    Head First HTML&CSS 学习笔记.zip

    CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS ...

    HeadFirst HTML&CSS学习笔记.zip

    CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记Head...

    HeadFirst设计模式学习笔记

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

    Head First 设计模式学习笔记

    ### Head First 设计模式学习笔记知识点总结 #### 1. 欢迎来到设计模式世界:设计模式入门 - **业务场景**: - **需求背景**:开发一款模拟鸭子的游戏,游戏内包含多种不同种类的鸭子,每种鸭子具有不同的外观...

    Head First Design Pattern 学习笔记

    著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...

    Head First Servlets & JSP 学习笔记

    《Head First Servlets & JSP》是一本广受欢迎的教材,它深入浅出地讲解了这些概念,帮助开发者通过SCWCD(Sun Certified Web Component Developer)认证。以下是一些关键知识点的详细解释: 1. **Servlet**: - *...

    Head First Servlet & JSP

    《Head First Servlet & JSP》是一本非常受欢迎的IT教程,专为准备SCWCD(Sun Certified Web Component Developer)认证的读者设计。本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两...

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

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

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

    在HeadFirst的学习笔记中,可能通过一个实际的示例,如咖啡制作的例子,来解释装饰模式的概念。在这个例子中,不同的咖啡种类(如浓缩咖啡、拿铁、卡布奇诺等)可以看作是具体组件,而糖、奶、巧克力等调料则是装饰...

    head_first_servlet&jsp学习笔记

    【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。

    Head First Ajax学习笔记

    ### Head First Ajax 学习笔记知识点总结 #### 一、异步请求与AJAX概念 - **异步请求**:允许页面在发送请求时继续执行后续任务,无需等待服务器响应,提高了用户体验。 - **AJAX (Asynchronous JavaScript and ...

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

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

    head first C#学习笔记:如何创建事件

    本学习笔记将深入探讨如何在C#中创建事件,以实现一个棒球模拟系统的例子。在这个系统中,我们将关注投球手、观众和裁判的交互,当输入棒球的轨迹和距离时,这些对象会根据模拟结果做出相应的反应。 首先,理解事件...

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

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

    基于Java语言的《Head First 设计模式》学习笔记及实战练习源码

    本项目为《Head First 设计模式》的Java语言学习笔记与实战练习源码集合,包含104个文件,主要包括88个Java源文件、12个Markdown文档、3个XML配置文件及少量其他辅助文件。内容涵盖设计模式的学习笔记以及相应的代码...

    python_head_first笔记.pdf

    Python 是一种高级语言,具有自动内存管理和动态类型检查的特性,易于学习和使用。 2. Python 的编辑环境 IDEL 是 Python 的编辑环境,提供了代码编辑、调试和测试等功能。 TAB 键可以给出提示语句,Alt-P 可以...

    Head First Java 中文高清PDF

    《Head First Java》是一本备受推崇的Java编程学习书籍,其中文高清PDF版本为学习者提供了方便快捷的阅读体验。这本书以其独特的教学风格和丰富的视觉元素,帮助初学者以直观易懂的方式理解复杂的Java概念。 Java是...

Global site tag (gtag.js) - Google Analytics