随笔分类 -  设计模式之禅

摘要:命令模式 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。命令模式是将一类对象的功能操作进行抽象,一般来说,这些对象有相同的方法,所以这类对象有着类似的操作,我们通过抽象,就可以. 阅读全文
posted @ 2013-06-16 22:36 hunterDing 阅读(209) 评论(0) 推荐(0)
摘要:桥梁模式 是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。抽象化 从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征,就是抽象化。共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃非本质的特征。 所以抽象化的过程也是一个裁剪的过程。在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。 通常... 阅读全文
posted @ 2013-06-12 20:35 hunterDing 阅读(160) 评论(0) 推荐(0)
摘要:建造者模式(Builder Pattern)也叫生成器模式,其定义如下:将一个复杂对象的构建与它的标示分离,使同样的构建过程刻意创建不同的表示。结构图:建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(Concrete Builder)角色。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。具体建造者(Concrete Builder)角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:实现Bui 阅读全文
posted @ 2013-06-03 23:55 hunterDing 阅读(185) 评论(0) 推荐(0)
摘要:模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。 通俗的说,模板方法模式就是在模板方法中按照一个的规则和顺序调用基本方法,通过汇总或排序基本方法而产生的结果集。可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。使用模板方法使系统扩展性增强,最小化了变化对系统的影响。模板方法模式的结构图: 1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;.. 阅读全文
posted @ 2013-05-26 22:08 hunterDing 阅读(185) 评论(0) 推荐(0)
摘要:适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。模式中的角色: 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 需要适配的类(Adaptee):需要适配的类或适配者类。 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 从网上摘录一个形象的例子:你新买的手机自带的耳机是2.5接口的,不幸的是有一天你的耳机坏了,你去市面上根本就找不到2.5的耳机了,基本上是3.5接口了,没办法你只好买了个3.5接口的耳机,老板告诉你:“我给你一个适配器... 阅读全文
posted @ 2013-05-26 13:22 hunterDing 阅读(202) 评论(0) 推荐(0)
摘要:门面(Facade)模式外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式的门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。门面模式有三个角色组成:1)门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。2)子系统角色:实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信 阅读全文
posted @ 2013-05-25 20:24 hunterDing 阅读(136) 评论(0) 推荐(0)
摘要:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。Observer模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变。Observer模式就是解决了这一个问题。可以看 阅读全文
posted @ 2013-05-21 23:21 hunterDing 阅读(141) 评论(0) 推荐(0)
摘要:什么是状态模式呢?当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。模式中的角色 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。 具体状态(Concrete State):实现抽象状态定义的接口。看一下demo: 阅读全文
posted @ 2013-05-14 23:41 hunterDing 阅读(271) 评论(0) 推荐(0)
摘要:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。该模式中包含的角色及其职责工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。抽象产品(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色是简单工厂模式的创建目标 阅读全文
posted @ 2013-05-12 13:25 hunterDing 阅读(170) 评论(0) 推荐(0)
摘要:多例模式实际上就是单例模式的推广,多例模式又划分为有上限多例模式和无上限多例模式两种,有上限多例模式中的多例类的实例是有上限的,当这个多例类中的上限数值上等于 1 时,此时,多例类退化回到了单例类;而对于无上限多例模式中的多例类,它的上限是没有限制的,也就是说它的上限数值是不确定的,这个多例类并不一定能够退化成单例类;多例模式特点:1. 多例类可以有多个实例2. 多例类必须自己创建自己的实例,并管理自己的实例,和向外界提供自己的实例 阅读全文
posted @ 2013-05-11 21:39 hunterDing 阅读(172) 评论(0) 推荐(0)
摘要:单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。通常,选择单例模式就是为了避免不一致状态,避免政出多头。饿汉式单例:View Code 1 //饿汉式单例类.在类初始化时,已经自行实例化 2 public class Singleton1 { 3 //私有的默认构造子 4 private Singleton1(... 阅读全文
posted @ 2013-05-11 12:23 hunterDing 阅读(139) 评论(0) 推荐(0)
摘要:代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用;代理与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的结构如下:subject(抽象主题角色):真实主题与代理主题的共同接口。RealSubject(真实主题角色):定义了代理角色所代表的真实对象。Proxy(代理主题角色):含有对真实主题角色 阅读全文
posted @ 2013-05-08 23:29 hunterDing 阅读(140) 评论(0) 推荐(0)
摘要:策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的教材类图书实行每本一元的折扣;对连环画类图书提供每本7%的促销折扣,而对非教材类的计算机图书有3%的折扣;对其余的图书没有折扣。由于有这样复杂的折扣算法,使得价格计算问题需要系统地解决。使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则 阅读全文
posted @ 2013-05-06 23:42 hunterDing 阅读(175) 评论(0) 推荐(0)