设计模式
文章平均质量分 70
laszloyu
这个作者很懒,什么都没留下…
展开
-
设计模式基础3--存取方法+Private类成员和方法
本来不想写这个的,太基础了,不过为了整个学习笔记的完备性还是简单写几笔给自己留着看。1.存取方法也就是所谓的getter and setter,对于类中的private成员提供对外的接口,这样的设计使得最后的在程序修改时只需要修改这些setter and getter,而不必工程中修改所有与这个成员相关的东西,这些setter和getter不单单是为了给类外的对象使用的,内部使用时也尽可能使用转载 2010-05-11 16:09:00 · 558 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记5--单例模式
1.单例模式确保一个实例被创建,并且任意时刻都只有一个对象。它给了我们一个全局的访问点,又屏蔽了全局变量的缺点。可以被用来管理共享资源,比如数据库连接或线程池。特征是构造函数为私有,然后声明一个私有静态成员作为类对象,对外提供一个静态类方法创建该对象,在创建对象时会先判断是否已经创建,若是则直接返回已经创建的对象,若没有则创建新对象。2.经典的单例模式如下:public class Sin转载 2010-05-12 17:49:00 · 473 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记3--装饰模式
1.这个模式可以称为“给爱用继承的人一个全新的设计眼界”的模式。牵扯到第五个设计原则:“类应该对扩展开放,而对修改封闭”。但是要注意,遵循这一标准会带来更多层次上的抽象,增加代码的复杂度,所以并不是所有类都要这样设计。2.文中举了一个为辛巴克咖啡馆写一个计算咖啡价格+调料价格的类,使用了装饰模式——动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。我们就拿这个计算转载 2010-05-12 14:32:00 · 718 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记2--观察者模式
1.我们需要理解报社、订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送或者邮寄给订报人新的报纸。然后,出版者+订阅者就是观察者模式,只不过名称不一样,主题(Subject,或者叫做Observabler)类比于出版者,订阅者改称为观察者(Observer)。该模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更转载 2010-05-12 11:21:00 · 907 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记8--模板方法模式
1.这个模式比较简单,我们举一个银行贷款申请流程程序的例子(这个并非是书中的例子):申请贷款,银行要检查这个客户的一些事宜,譬如客户收支状况记录、从三个地方拿到他的信用记录、得到其他已有相关债务信息、得到借债人股票市值、得到借债人未来收入预期分析等等。我们可以设计如下一个模板方法:abstract class CheckBackground { public abstra转载 2010-05-14 15:31:00 · 639 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记7--适配器模式和外观模式
1.适配器的作用:将一个接口转换为另一个接口。我们可以比喻为一个插座的转换头。2.构造适配器的关键:实现了目标接口,并持有被适配者的实例。 而适配器使用的方法是:客户通过目标接口调用适配器的方法对适配器发出请求,适配器使用被适配者接口把请求转换为被支配者的一个或多个调用接口。我们举一个火鸡冒充鸭子的适配器例子:我们定义两个东西:一个是鸭子:public interface Duck转载 2010-05-13 19:20:00 · 589 阅读 · 0 评论 -
追MM与Java的23种设计模式
1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创转载 2010-05-13 19:52:00 · 448 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记9--迭代器模式
1.本节的一个话题引子是一个餐厅,它提供早餐和午餐,但是在订制菜单的时候,早餐(Pancake)和午餐(Dinner)的实现却造成了一些麻烦。订制早餐的菜单是用ArrayList这样一个数据池来维护的。但是订制午餐的菜单则是一个标准数组进行维护。那么在设计订餐程序来遍历这两个不同的数据结构形成的菜单的时候,就会比较麻烦,毕竟返回的数据类型不是一样的。(不知道我说清楚了没,参阅英文版原书P321)转载 2010-05-14 15:49:00 · 756 阅读 · 1 评论 -
HeadFirst 设计模式学习笔记4--工厂模式
1.我们在前边提到一个原则就是“面向接口而不要面向实现编程”,但是我们一直在使用Duck duck = new MallardDuck()这样的模式,后边的new语句却违反了这个原则。工厂方法就可以解决这个问题,它用来封装对象的创建。2.这一节我们考虑如下场景:一个披萨店要制作各种各样的披萨,甚至还要开分店。其中涉及到订购披萨的步骤。我们可以把orderPizza中的关于制作pizza的部分单转载 2010-05-12 16:05:00 · 552 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记1--策略模式
1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用。进而引出设计原则1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起,把会变化的部分取出并封装起来,好让其他部分不会受到影响 。——每个设计模式背后的精神所在。2.我们希望运行时动态的改变一些行为,这就引出了第转载 2010-05-11 18:07:00 · 1018 阅读 · 1 评论 -
设计模式基础6--监视器
1)使用场景:一个对象可能要访问共享资源来完成它所要提供的服务,在多线程情况下,多个这样的对象在一起就会产生意想不到的后果,比如竞争。监视器就是在这样的一个对象上设置一个锁,以保证在给定时间内,只有一个线程可以执行这个对象上的任何一个方法。 2)例子:我们创建一个日志记录的类public class FileLogger { public synchronized void转载 2010-05-11 16:30:00 · 1071 阅读 · 0 评论 -
设计模式基础5--不变对象
1)使用场景:牵涉到对数据对象进行修改时,可能由于修改的顺序而造成数据的错乱,此时使用不变对象就可以避免,而且还可以不使用高开销的synchronizing方法。一个数据模型类的实例所持有的数据在整个生命周期中都不变,这个类就会是线程安全。 2)设计方法:a)所有的实例变量都必须在构造函数中设置,因为构造函数是线程安全的。b)将这个类设置为final,防止类由于继承而产生的类方法的转载 2010-05-11 16:26:00 · 492 阅读 · 0 评论 -
设计模式基础4--常量数据管理器
a)使用场景:在程序设计中,我们可以把所用要用到的常量设计为一个独立的类,使得对常量的管理有效清晰。 b)应用举例:我们考虑一个顾客数据存储的应用场景,要用到三种类,Account, Address 和 CreditCard来代表用户数据信息。 我们设计了一个常量管理器对常量进行集中管理,UML如下: public final class Consta转载 2010-05-11 16:19:00 · 741 阅读 · 0 评论 -
HeadFirst 设计模式学习笔记6--命令模式
1.这一节我们的任务是创建一个类似智能家居的万能遥控器,控制各种家电。我们需要将“请求”封装成对象(一个命令对象通过在特定接收者上绑定一组动作来封装请求),以便使用不同的请求、队列、或者日志来参数化其对象——这就是命令模式。2.我们具体来看一个例子:首先我们要完成对命令的对象封装:public interface Command { public void execute(转载 2010-05-12 18:16:00 · 771 阅读 · 0 评论