Design patterns
文章平均质量分 86
sunxing007
这个作者很懒,什么都没留下…
展开
-
设计模式读书笔记之策略模式(Strategy)
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm原创 2010-03-15 13:58:00 · 2808 阅读 · 3 评论 -
设计模式读书笔记之备忘录模式(Memento)
备忘录模式:在不破坏封装性的前提下,捕获对象的内部状态并保存,这样以后就可以恢复该对象恢复到保存的状态。备忘录模式比较简单, 不要因为名字比较陌生而不敢学它. 它没有复杂的结构, 上图已经能足够说明问题.Originator: 备忘录发起人, 通常是需要备忘的对象自己.Memento: 备忘录对象, 保存了Originator的内部状态. CareTaker: 备忘录管理者.原创 2010-03-28 18:30:00 · 1759 阅读 · 0 评论 -
设计模式读书笔记之组合模式(Composite)
组合模式:将对象组合成树形结构以表示部分和整体的层次结构. 组合模式使得用户对单个对象和组合对象的适用具有一致性.先用一个普通的例子来解释一下组合模式. 一个很大的集团公司, 在各个大区开有分公司, 在小地区开有办事处, 一个经理,可以在办事处开展业务, 也可以在分公司工作, 还可以在总公司工作, 这是因为, 不管是总公司, 分公司, 还是办事处, 经理的工作模式基本相同, 而且总公司,原创 2010-03-28 22:07:00 · 2087 阅读 · 0 评论 -
设计模式读书笔记之单例模式(Singleton)
单例模式:保证一个类只有一个实例,并提供一个全局的访问途经。package designpattern.singleton;public class Singleton { private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(i原创 2010-03-28 21:50:00 · 2037 阅读 · 4 评论 -
设计模式读书笔记之解释器模式(Interpreter pattern)
解释器模式:给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。由定义来看,解释器模式就是一个不常用的模式,但是学习一下也没有坏处.我第一次听到解释器模式的时候想到的东西就是命令行(CMD)解释器,这就是典型的望文生义.但是解释器模式也没有想象中的复杂, 先举两个例子来对解释器模式建立一个大体的印象.第一个是: 早期的手机中都有一个铃声编辑器, 你可以自原创 2010-04-12 17:41:00 · 3955 阅读 · 0 评论 -
设计模式读书笔记之桥接模式(bridge pattern)
桥接模式:将抽象部分和他的实现部分分离,使他们可以独立地变化。我个人认为,说桥接模式和享元模式, 与其说是一种设计模式,还不如说是一种思想, 它体现在对系统或对象的分析阶段。当你用桥接模式的思想去分析一个系统或对象,然后用代码实现它之后拿给别人看, 未必有人能说出你用了桥接模式. 桥接模式是为了解决这个问题而来的:继承关系是一种紧密的依赖关系,以至于父类有任何改变必将导致子类也发生变化,而原创 2010-04-03 23:09:00 · 2625 阅读 · 0 评论 -
设计模式读书笔记之中介者模式(mediator pattern)
中介者模式:用一个中介对象来分装一系列对象的交互。中介者模式使得各个对象之间不需要直接打交道,从而使他们松散耦合。可以独立的改变他们之间的交互。如果你第一次接触中介者模式,你一定从上图看不出他的作用来。下图更能说明问题, 中介者模式就是要把左边的结构变成右边的结构:现实中一个更恰当的例子就是联合国,如果没有联合国,则各国之间的关系如下图的左边,在有联合国之后,国与国之间的争执可通过原创 2010-04-05 23:01:00 · 2441 阅读 · 0 评论 -
设计模式读书笔记之享元模式(Flyweight pattern)
享元模式:运用共享技术支持大量细粒度的对象。记得我年前我读过一次享元模式,当时因为所看的书中的例子不是很好懂,就觉得享元模式无非就是搞个缓冲池保存一些对象然后被共享以免重复创造。我花了差不多两天的时间来细看享元模式,除了参阅head first,大话设计模式,java与模式,还大量的在网上看网友们的理解. 我发现三本书中都没有举出恰当的例子来说明这个模式,都是牵强附会,为了设计模式原创 2010-04-06 17:36:00 · 2454 阅读 · 1 评论 -
设计模式读书笔记之命令模式(Command Pattern)
命令模式:将请求封装成对象,从而可使用不同的请求对客户进行参数化,对请求进行排队,撤销等操作。 特点:Invoker:负责接收和执行命令,也可对命令排队,执行命令撤销等等;Command:命令接口,声明了相关的操作;ConcreteCommand:具体的命令, 持有一个Receiver,并通过调用Receiver的方法执行具体的操作;Receiver:请求的最终执行者。原创 2010-04-04 23:13:00 · 2514 阅读 · 3 评论 -
设计模式读书笔记之职责链模式(chain of responsibility)
职责链模式:当一个请求有可能被多个对象处理,则将这些对象连成一条链,并沿着这条链传递请求,直到该请求被处理为止。单看上图, 你肯定看不出职责链模式的特征, 先举一个例子来说明一下. 比如一个员工想加工资, 他首先会告知team leader, 如果在team leader授权范围之内,则他可以办到, 否则,就要请求上级来处理,最后直到老板, 于是很容易写出这样的代码来:public c原创 2010-04-05 21:44:00 · 2254 阅读 · 1 评论 -
设计模式读书笔记之面向对象的几大原则
为什么要知道面向对象的基本原则呢? 因为我们考察一个设计模式好不好, 一个设计优秀不优秀, 用基本原则来检验. 单一职责原则(Single Responsibility Principle): 就是一个设计或实体应该只做一件事/只描述一个事物, 比如一个类Cat, 那么读代码的人应该觉得这个类始终都在说猫,而不是扯到狗身上去了, 虽然猫狗有时候会打架,但那也只是关联关系. 这与现实中也很相原创 2010-04-16 21:02:00 · 4159 阅读 · 11 评论 -
设计模式读书笔记之观察者模式(Observer)
观察者模式:让多个观察者可以监听某一个主题,当主题发生变化时,即使通知观察者,使他们自动能够更新自己。类图就免了.观察者模式比较简单, 通常的特征是:主题(被观察者)维护一个观察者序列, 当主题发生变化的时候,依次通知观察者,使之也改变自身.基础示例://抽象主题package designpattern.observer;public interface Subject原创 2010-03-22 22:54:00 · 1882 阅读 · 0 评论 -
设计模式读书笔记之外观模式/门面模式(Facade)
门面模式:为多个子系统提供统一的高层接口,以降低客户对子系统的依赖, 减少客户使用子系统的难度.门面模式是一个名字和描述都让人感觉很难的模式,我也曾经被它的名字吓倒过。其实门面模式很简单, 就是要把下面的左图结构变为右图结构。 基础代码://子系统1package designpattern.facade;public class SubSystem1 { pu原创 2010-03-22 22:06:00 · 1740 阅读 · 2 评论 -
设计模式读书笔记之装饰器模式(Decorator)
Decorator装饰器模式就是创建一个新类为某一个类动态添加新功能或增强原有的功能.特点:装饰器持有一个被装饰的对象;装饰器和被装饰的对象有相同的接口;装饰器给被装饰的对象添加额外的功能或增强已有的功能.即保持接口, 增强功能. 表现形式上最大的特点是装饰器使用并且实现一个父类. 示例代码://装饰器和被装饰的对象共同的接口package designpattern.de原创 2010-03-15 14:56:00 · 2753 阅读 · 1 评论 -
设计模式读书笔记之适配器模式(Adapter)
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。特点:1 实现了客户希望的接口;2 持有被适配的对象;3 不改动客户代码和被适配对象。示例代码:有一个客户类学生, 骑自行车上学, 自行车是该客户类学生的期望接口, 后来学生长大了,骑摩托车,摩托车的接口不是学生期望的,so... //客户希望的接口package designpat原创 2010-03-15 17:53:00 · 1998 阅读 · 6 评论 -
设计模式之访问者模式(Visitor)
访问者模式:在不改变一个已存在的类的层次结构的情况下,为这个层次结构中的某些类定义一个新的操作,这个新的操作作用于(操作)已存在的类对象,也即新的操作需要访问被作用的对象。一句话: 为一个稳定的类结构增加操作. 也即把易变化的类的行为搬到访问者中.特点:1 访问者角色(Visitor)作用于具体的元素执行相关的操作;2 元素角色(Element)定义了accept方法接受一个访问者原创 2010-03-22 16:17:00 · 2472 阅读 · 6 评论 -
设计模式读书笔记之简单工厂模式(Factory)
这篇文章纯属为了后面的工厂方法和抽象工厂做对比和铺垫, 因为简单工厂就是简单的创造并返回对象, 没有复杂的结构和逻辑. 以最常见的dao为例。User对象有UserDao接口,UserDao有实现类UserOracleDao,UserDB2Dao。//业务模型package designpattern.factory;public class User {//......}原创 2010-03-22 19:54:00 · 2073 阅读 · 0 评论 -
设计模式读书笔记之工厂方法模式(Factory method)
拿前面的简单工厂的例子作案例.把简单工厂改造成工厂方法.//工厂接口package designpattern.factory.factorymethod;import designpattern.factory.*;public interface IFactory { public UserDao createUserDao();}//DB2Dao工厂 pack原创 2010-03-22 20:01:00 · 2324 阅读 · 0 评论 -
设计模式读书笔记之原型模式(Prototype)
原型模式:通过克隆原型来创造新对象。示例代码:package designpattern.prototype;public class Prototype implements Cloneable{ private String name; public String getName() { return name; } public void setName(S原创 2010-03-22 20:33:00 · 1640 阅读 · 1 评论 -
设计模式读书笔记之代理模式(Proxy)
代理模式: 为其他对象提供代理以控制对该对象的访问.示例代码://公共接口package designpattern.proxy;public interface Subject { public void request();}//被代理类package designpattern.proxy;public class RealSubject implem原创 2010-03-22 21:03:00 · 1970 阅读 · 0 评论 -
设计模式读书笔记之模版方法模式(Template)
模版方法模式:定义了一个算法/流程骨架,但是将一些步骤推迟到子类中去实现。示例代码://模版package designpattern.template;public abstract class Template { private void step1(){ System.out.println("This is the first step."); } pr原创 2010-03-22 21:31:00 · 1702 阅读 · 1 评论 -
设计模式读书笔记之建造者模式(Builder)
建造者模式: 将复杂对象的建造和表示分离, 使同样的建造过程可以创造出不同细节的产品.建造者模式,听名字就应该知道和工厂模式一样,是用来创造对象的。但是建造者和工厂模式的区别就是工厂模式只关注最终的产品,它往往是简单的调用被创建者的构造函数;而建造者更关心细节, 它定义了创建一个复杂对象所需的步骤, 而创建者具体的实现类可根据具体的需求,调整创建细节。示例://产品packag原创 2010-03-22 22:38:00 · 1613 阅读 · 0 评论 -
设计模式读书笔记之抽象工厂模式(Abstract Factory)
如果一个产品家族中有多个产品, 而工厂需要创建多个产品家族, 那么前例中的工厂方法就自然演化为抽象工厂.比如我们在前面的工厂方法的基础上再添加创建DeptDao的功能.//工厂接口package designpattern.factory.abstractfactory;import designpattern.factory.*;public interface IFac原创 2010-03-22 20:14:00 · 2088 阅读 · 5 评论 -
设计模式读书笔记之状态模式(State Pattern)
状态模式:当对象内部状态发生变化时允许改变其行为,使对象看起来像自身发生了变化一样。状态模式解决的问题是当对象的状态转换的条件过于复杂的情况, 它把状态的判断逻辑以及状态发生变化后对象的行为改变转移到不同的状态对象中去。比如: 一个人Person, 他在不同的时间, 自身处在不同的状态, 从而有不同的行为.于是我们通常会写出这样的代码:public class Person {原创 2010-03-28 00:28:00 · 2180 阅读 · 0 评论