《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
分享到:
相关推荐
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 ...
CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记Head...
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
### Head First 设计模式学习笔记知识点总结 #### 1. 欢迎来到设计模式世界:设计模式入门 - **业务场景**: - **需求背景**:开发一款模拟鸭子的游戏,游戏内包含多种不同种类的鸭子,每种鸭子具有不同的外观...
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
《Head First Servlets & JSP》是一本广受欢迎的教材,它深入浅出地讲解了这些概念,帮助开发者通过SCWCD(Sun Certified Web Component Developer)认证。以下是一些关键知识点的详细解释: 1. **Servlet**: - *...
《Head First Servlet & JSP》是一本非常受欢迎的IT教程,专为准备SCWCD(Sun Certified Web Component Developer)认证的读者设计。本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两...
《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...
在HeadFirst的学习笔记中,可能通过一个实际的示例,如咖啡制作的例子,来解释装饰模式的概念。在这个例子中,不同的咖啡种类(如浓缩咖啡、拿铁、卡布奇诺等)可以看作是具体组件,而糖、奶、巧克力等调料则是装饰...
【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。
### Head First Ajax 学习笔记知识点总结 #### 一、异步请求与AJAX概念 - **异步请求**:允许页面在发送请求时继续执行后续任务,无需等待服务器响应,提高了用户体验。 - **AJAX (Asynchronous JavaScript and ...
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
本学习笔记将深入探讨如何在C#中创建事件,以实现一个棒球模拟系统的例子。在这个系统中,我们将关注投球手、观众和裁判的交互,当输入棒球的轨迹和距离时,这些对象会根据模拟结果做出相应的反应。 首先,理解事件...
### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...
本项目为《Head First 设计模式》的Java语言学习笔记与实战练习源码集合,包含104个文件,主要包括88个Java源文件、12个Markdown文档、3个XML配置文件及少量其他辅助文件。内容涵盖设计模式的学习笔记以及相应的代码...
Python 是一种高级语言,具有自动内存管理和动态类型检查的特性,易于学习和使用。 2. Python 的编辑环境 IDEL 是 Python 的编辑环境,提供了代码编辑、调试和测试等功能。 TAB 键可以给出提示语句,Alt-P 可以...
《Head First Java》是一本备受推崇的Java编程学习书籍,其中文高清PDF版本为学习者提供了方便快捷的阅读体验。这本书以其独特的教学风格和丰富的视觉元素,帮助初学者以直观易懂的方式理解复杂的Java概念。 Java是...