【设计模式】
文章平均质量分 85
salmon4zl
这个作者很懒,什么都没留下…
展开
-
单例(Singleton)模式
特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其它对象提供这一实例。 一:饿汉式单例类 public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton() { } publi...原创 2009-01-06 10:10:44 · 103 阅读 · 0 评论 -
策略(Strategy)模式
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式相当于"可插入式(Pluggable)的算法。 一,结构: 环境(Context)角色:持有一个Strategy类的引用。 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个...原创 2009-01-08 21:14:17 · 75 阅读 · 0 评论 -
桥梁(Bridge)模式
事实上由于Tank类型的固有逻辑,使得Tank类型具有了两个变化的维度—— 一个变化的维度为“平台的变化”,一个变化的维度为“型号的变化”。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得Tank类型可以轻松地沿着“平台”和“型号”两个方向变化,而不引入额外的复杂度? 将抽象部分与实现部分分离,使它们都可以独立地变化。 要点 1:Bridge模式使用“对象间的组合关系”解...原创 2009-01-08 22:16:53 · 136 阅读 · 0 评论 -
命令(Command)模式
在软件系统中,行为请求者;与行为实现者通常呈现一种紧耦合。但在某些场合,比如要对行为进行记录、撤销/重做、事务等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将行为请求者与行为实现者解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 一,结构 ...原创 2009-01-09 10:33:01 · 117 阅读 · 0 评论 -
模版方法(Template Method)模式
Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 一,结构: 二,示例代码: /** * 算法骨架 * @auth...原创 2009-01-09 11:01:14 · 102 阅读 · 0 评论 -
迭代器(Iterator)模式
在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合...原创 2009-01-09 11:20:43 · 89 阅读 · 0 评论 -
访问者(Visitor)模式
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。 数据结构的每一个节点都可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。这样的过程叫做"双重分派"。节...原创 2009-01-09 13:09:36 · 92 阅读 · 0 评论 -
职责链(Chain of Responsibility)模式
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。 责任链可能是一条直线、一个环链或者一个树结构的一部分。 一,结构: ...原创 2009-01-10 09:14:01 · 103 阅读 · 0 评论 -
享元(Flyweight)模式
面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中下,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等。采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够...原创 2009-01-10 10:27:27 · 119 阅读 · 0 评论 -
观察者(Observer)模式
观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 一个软件系统常常要求在某一个对象的状...原创 2009-01-07 22:27:24 · 94 阅读 · 0 评论 -
门面(Facade)模式
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。 一,结构: 门面(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(...原创 2009-01-07 21:50:48 · 123 阅读 · 0 评论 -
代理(Proxy)模式
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 一,结构 抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一...原创 2009-01-06 10:52:58 · 111 阅读 · 0 评论 -
工厂方法(Factory Method Pattern)模式
一:特点 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的...原创 2009-01-06 10:32:07 · 89 阅读 · 0 评论 -
简单工厂(Simple Factory Pattern)模式
一,结构图 工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品角色Product (Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。具体产品角色ConcreteProduct (BulbLight, T...原创 2009-01-06 10:34:40 · 118 阅读 · 0 评论 -
抽象工厂(Abstract Factory Pattern)模式
一,结构 抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。 具体工厂(Concrete Factory)角色:这个角色直接...原创 2009-01-06 10:36:29 · 78 阅读 · 0 评论 -
建造者(Builder)模式
有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。 有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。 这时候,此对象相当于...原创 2009-01-06 10:40:44 · 83 阅读 · 0 评论 -
原型(Prototype)模式
克隆的实现方法有两种:浅拷贝(shallow copy)与深拷贝(deep copy)。 浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那么两个对象将引用同一个字符串。 深拷贝是对对象实例中字段引用的对象也进行拷贝的一种方式,所以如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个深拷贝的话,我们将创建...原创 2009-01-06 10:42:37 · 77 阅读 · 0 评论 -
适配器(Adapter)模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。 二,类的Adapter模式的结构: 三,示例代码 /** * 目标 * * @author Salmon * */ public interface Target { public void reque...原创 2009-01-06 10:44:29 · 77 阅读 · 0 评论 -
合成(Composite)模式
合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全模式和透明模式。 透明方式 作为第一种选择,在Component里面声明所有的用来管理子类对象的方法,包括add()、remove(),以及getChild()方法。这样...原创 2009-01-06 10:48:33 · 97 阅读 · 0 评论 -
装饰(Decorator)模式
装饰(Decorator)模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 一,结构 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 具体构件(Concrete Component)角色:定义一个...原创 2009-01-06 10:51:24 · 140 阅读 · 0 评论 -
状态(State)模式
在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。 如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 一,结构: 二,示例代码: public interface State { public void ...原创 2009-01-10 11:06:40 · 93 阅读 · 0 评论