打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
专栏:HeadFirst 设计模式学习笔记
  • HeadFirst 设计模式学习笔记
  • HeadFirst 设计模式是一本很好的书,本系列文章详细记录下从中学习的精华,希望能够对广大博友起到抛砖引玉的作用。
  • 收藏

最新更新文章

HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零

1.概述 这个模式也比较简单,书中没有提到。用于恢复上次操作结果等场景,比如数据库回滚等。这个模式有三个参与的实体: Originator:知道如何保存自己的对象。 Caretaker:知道Originator何时以及为何保存并恢复自己的对象。 Memento:由Originator进行读写,并且Caretaker完成维护的对象 2.实例 首先,我们创建一个Memento: 1: class Memento { 2: private String state; 3: ...

gnuhpc 2011-04-10 10:07 阅读(2429) 评论(8)

HeadFirst 设计模式学习笔记21-- 解释者(Interpreter)模式拾零

1.概述 这个模式是在不能叫做模式,它的作用是实现一种语言规范的解释器,比如罗马数字解释器。 2.实例 我们在这创建一个决策器。通过构建有两种语言,OR和AND,可以想象为一个单位,领导给出一些决策意见,比如谁或者谁提拔,谁和谁提拔等(这里面有嵌套),然后存入这个决策器中。主程序通过输入几个人名的组合得出一个是不是可能这些人被提拔的决策。 首先,我们对决策器中的语言进行一个抽象: 1: public abstract class Expression { 2: abstract ...

gnuhpc 2011-04-09 20:14 阅读(647) 评论(1)

HeadFirst 设计模式学习笔记20--桥接(Bridge)模式拾零

1.概述 该模式也是Head First中未收录的,其主要用于分离接口与实现,常应用在你不希望将实现和抽象永久绑定的时候。其实质在于提供一个对抽象接口的抽象实现,而抽象实现中又包含一个具体实现接口(叫做“实现者”)的引用,通过这个引用给抽象实现提供能力。 2.实例 假设我们要创建一个具有持久化能力的类,其对象实例的持久化可能是通过数据库,也可能是通过文件系统进行。通常的实现是通过继承这个类分别完成数据库和文件系统持久化的能力。但这就会导致具体实现和抽象的紧密绑定,不利于以后单独对实现或抽象进行修改或扩...

gnuhpc 2011-04-09 17:04 阅读(720) 评论(1)

HeadFirst 设计模式学习笔记19--原型(Prototype)模式拾零

1.概述 这个模式在Head First这本书中也没有具体提到。其主要应用于如下场景:对于创建一个新的对象,若且你手中已经有了一个非常相像的对象实例,那么你可以利用这个现有对象进行新对象的创建。用现实中的例子来说,比如细胞分裂,一个细胞分裂为两个细胞(可能这个比喻在生物学上有些出入)。参与这个模式的两种实体为: 原型:一个提供克隆自己的接口的抽象。 具体原型:实现这个克隆自己的的接口的具体实现类。 2.实例 首先我们实现一个原型模式的原始例子,这里利用了Java中Object的clone()方法:...

gnuhpc 2011-04-09 11:08 阅读(500) 评论(2)

HeadFirst 设计模式学习笔记18--中介者(Mediator)模式拾零

.1.概述 该模式在Head First中没有介绍,它用于通过一个中介者完成对象间通信的解耦。当代码中出现大量有着其他对象信息的对象时就可以使用这个模式。 在这个模式中,有如下的参与者: 中介者(Mediator):抽象定义了“同事”(colleagues,稍后有定义)们通信的接口。 具体中介者(Concrete Mediator):实现了“同事”间的通信接口。 同事(Colleague):参与通信的实体抽象。 具体同事(Concrete Colleague):实现的参与通信的实体。 简单的说...

gnuhpc 2011-04-08 17:53 阅读(504) 评论(1)

HeadFirst 设计模式学习笔记17--建筑者(Builder)模式拾零

1.概述 这个模式在Head First中没有介绍,大概是因为这个模式和工厂模式有点像。其目的主要是通过创建简单的对象构建一个复杂的对象。 2.举例 举一个例子:创建汽车的相关指标说明。 首先我们创建一个汽车的类: 1: public class Car { 2: private boolean powerSteering = false; 3: private boolean powerWindow = false; 4: private String price =...

gnuhpc 2011-04-07 11:51 阅读(1923) 评论(3)

HeadFirst 设计模式学习笔记16--享元模式拾零

Author:gnuhpc WebSite:blog.csdn.net/gnuhpc 这个模式也是这本书中没有详细阐明的,其实这个模式多多少少有点单例模式+简单工厂模式的意味。在Java 中,String对象就是用享元模式进行管理的——Java将所有固定的String都放在了一个常量池中,相同的String只保存一份拷贝——这个带来的好处是显而易见的,内存占用和创建对象的开销都随之降低——这个模式适用于常用的细粒度可共享对象的创建。 我们设想一个问题场景:在一个预约程序中用于表达时间的类Tim...

gnuhpc 2011-04-06 16:59 阅读(2323) 评论(13)

HeadFirst 设计模式学习笔记15--责任链模式拾零

去年读《Head First 设计模式》这本书,今年重新再读,并且记一些笔记。 Head First里面没有详细说这个设计模式,可能是觉得这个设计模式和观察者模式有很大的相似度,事实也正是如此。正如观察者模式一样,也有一个subject表示一个事件的发生,而向后传递的不再是一个或多个并行的观察者,而是一个或多个串行Object(可以理解为观察者,只是名字不同而已)。 我们下边举个实例,在这个例子中,有一个获取帮助的事件发生,根据帮助的种类不同,我们有三层对这个事件进行响应,分别是FrontEnd ...

gnuhpc 2011-04-04 16:01 阅读(3209) 评论(8)

HeadFirst 设计模式学习笔记14——MVC分析

1.M-V-C ——Model--View--Controller,模式-视图-控制器,这是一种范型。模型对象正是应用系统存在的理由,你设计的对象,包含了数据、逻辑和其他在你的应用领域创建定制的类。视图通常是控件,用来显示和编辑,控制器位于二者中间,负责将每个改变的状态送进送出。而学习设计模式是理解MVC的钥匙。书中用一个iTunes的例子直观描述了MVC: 2.MVC的基本原理: ...

gnuhpc 2010-05-10 14:45 阅读(1391) 评论(6)

HeadFirst 设计模式学习笔记13——多种模式组合使用

1.在这一章中,我们要通过一个例子把前边学习过的设计模式串一遍,以一种需求不断叠加的实际工作场景为背景。首先我们还是把我们第一个模式所举的鸭子的例子搬出来,我们要创建一个模拟器对这些鸭子的叫声进行模拟: 首先我们设计一个呱呱叫的接口: public interface Quackable {     public void quack(); }   接着我们让一些类实现这个接口—...

gnuhpc 2010-05-05 14:04 阅读(1193) 评论(5)

HeadFirst 设计模式学习笔记12——代理模式

1.这一节的任务是我们需要完成对上一节的糖果机产生一个机器状况和余量的报告,若这个报告在本地(不是通过Internet)生成的话,那么我们的设计就很简单了,在糖果机中加入Location的信息,并且创建一个类GumballMonitor 完成报告的生成:public class GumballMonitor {     GumballMachine machine;     public Gu...

gnuhpc 2010-05-04 09:00 阅读(1468) 评论(1)

HeadFirst 设计模式学习笔记11——状态模式

1.我们这次的话题是要实现一个糖果机,这个糖果机中如下的一些状态以指导糖果机的转移: 我们根据这个状态机写了一个有if..else为主体的状态机程序,对每一个状态的转入转出做了实现:public class GumballMachine {     final static int SOLD_OUT = 0;     final static int NO_QUARTER = 1;  ...

gnuhpc 2010-04-23 09:25 阅读(1499) 评论(4)

HeadFirst设计模式学习笔记10——组合模式

1.我们接着上次的话题,现在有一个新需求就是子菜单功能。我们在此使用一个新的模式——组合模式,意思是允许你将对象组合成树形结构来表现整体-局部的层级,它能使客户以一致的方式处理个别对象以及对象的组合。你告诉顶层的动作,它会完成所有相关的操作。这也就是这个模式使用的场景。在这个例子中,分为菜单和菜单项,一个菜单中可能还有菜单,而且一个菜单中可能还有多个菜单项,但是菜单项不会再有下一层的包含关系。...

gnuhpc 2010-04-21 15:24 阅读(1036) 评论(4)

HeadFirst 设计模式学习笔记9--迭代器模式

1.本节的一个话题引子是一个餐厅,它提供早餐和午餐,但是在订制菜单的时候,早餐(Pancake)和午餐(Dinner)的实现却造成了一些麻烦。订制早餐的菜单是用ArrayList这样一个数据池来维护的。但是订制午餐的菜单则是一个标准数组进行维护。那么在设计订餐程序来遍历这两个不同的数据结构形成的菜单的时候,就会比较麻烦,毕竟返回的数据类型不是一样的。(不知道我说清楚了没,参阅英文版原书P321) ...

gnuhpc 2010-04-19 08:44 阅读(1825) 评论(4)

HeadFirst 设计模式学习笔记8--模板方法模式

1.这个模式比较简单,我们举一个银行贷款申请流程程序的例子(这个并非是书中的例子):申请贷款,银行要检查这个客户的一些事宜,譬如客户收支状况记录、从三个地方拿到他的信用记录、得到其他已有相关债务信息、得到借债人股票市值、得到借债人未来收入预期分析等等。我们可以设计如下一个模板方法:abstract class CheckBackground { public abstra...

gnuhpc 2010-04-06 10:56 阅读(1806) 评论(2)

[编程语言] HeadFirst 设计模式学习笔记7--适配器模式和外观模式

1.适配器的作用:将一个接口转换为另一个接口。我们可以比喻为一个插座的转换头。 2.构造适配器的关键:实现了目标接口,并持有被适配者的实例。 而适配器使用的方法是:客户通过目标接口调用适配器的方法对适配器发出请求,适配器使用被适配者接口把请求转换为被支配者的一个或多个调用接口。我们举一个火鸡冒充鸭子的适配器例子:我们定义两个东西:一个是鸭子:public interface D...

gnuhpc 2010-03-31 14:40 阅读(1007) 评论(2)

HeadFirst 设计模式学习笔记6--命令模式

1.这一节我们的任务是创建一个类似智能家居的万能遥控器,控制各种家电。我们需要将“请求”封装成对象(一个命令对象通过在特定接收者上绑定一组动作来封装请求),以便使用不同的请求、队列、或者日志来参数化其对象——这就是命令模式。2.我们具体来看一个例子:首先我们要完成对命令的对象封装:public interface Command {     public void execute();...

gnuhpc 2010-03-26 11:24 阅读(1796) 评论(11)

HeadFirst 设计模式学习笔记5--单例模式

1.单例模式确保一个实例被创建,并且任意时刻都只有一个对象。它给了我们一个全局的访问点,又屏蔽了全局变量的缺点。可以被用来管理共享资源,比如数据库连接或线程池。特征是构造函数为私有,然后声明一个私有静态成员作为类对象,对外提供一个静态类方法创建该对象,在创建对象时会先判断是否已经创建,若是则直接返回已经创建的对象,若没有则创建新对象。 2.经典的单例模式如下: public class Sin...

gnuhpc 2010-03-23 11:33 阅读(1119) 评论(8)

HeadFirst 设计模式学习笔记4--工厂模式

1.我们在前边提到一个原则就是“面向接口而不要面向实现编程”,但是我们一直在使用Duck duck = new MallardDuck()这样的模式,后边的new语句却违反了这个原则。工厂方法就可以解决这个问题,它用来封装对象的创建。2.这一节我们考虑如下场景:一个披萨店要制作各种各样的披萨,甚至还要开分店。其中涉及到订购披萨的步骤。我们可以把orderPizza中的关于制作pizza的部分单...

gnuhpc 2010-03-13 10:51 阅读(1791) 评论(18)

[编程语言] HeadFirst 设计模式学习笔记3--装饰模式

1.这个模式可以称为“给爱用继承的人一个全新的设计眼界”的模式。牵扯到第五个设计原则:“类应该对扩展开放,而对修改封闭”。但是要注意,遵循这一标准会带来更多层次上的抽象,增加代码的复杂度,所以并不是所有类都要这样设计。2.文中举了一个为辛巴克咖啡馆写一个计算咖啡价格+调料价格的类,使用了装饰模式——动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。我们就拿这个计算咖啡...

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
HeadFirst设计模式
php设计模式实例详解
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
大话PHP设计模式
23 种设计模式的分类和功能
设计模式之总结与回顾
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服