设计模式
Owen William
这个作者很懒,什么都没留下…
展开
-
单例模式
如果一个灯始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。对Spring框架而言,可以配置在Bean实例时指定scope=”singleton”来配置单例模式。如果配置元素没有指定scope属性,则该Bean实例默认是单例的行为方式。对于单模式,笔者不想通过太多的理论语言,通过下面的例子,读者可以慢慢理会。class Singleton{ // 使用一个类变量缓存曾经原创 2016-03-10 23:09:11 · 323 阅读 · 0 评论 -
命令模式
假如某个方法需要完成一个功能,完成这个功能的大部分步骤已经确定了,但可能少量具体步骤无法确定,必须等到执行该方法时才可确定。这个方法不仅要求参数可以变化,甚至要求方法执行的代码也可以变化,需要把“处理行为”作为一个参数传入方法。所以实际传入该方法的应该是一个对象,该对象通常是某个接口的匿名实现类的实例,该接口通常被称为命令接口,这种设计方式也被称为命令模式。下面的程序定义一个ProcessArra原创 2016-03-10 23:31:23 · 372 阅读 · 0 评论 -
策略模式
策略模式用于封装系列的算法,这些算法通常被封装在一个被称为Context的类呷,客户端程序可以自由选择其中一种算法,或让Context为客户端选择一个最佳的算法——使用策略模式的优势是为了支持算法的自由切换。假设这样的场景:假如正在开发一个网上书店,该书店为了更好地促销,经常需要对图书进行打折促销,程序需要考虑各种打折促销的计算方法。下面是实现的UML类图。下面先提供一个打折算原创 2016-03-11 23:23:28 · 729 阅读 · 0 评论 -
门面模式
门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。假设这样的场景:有一个顾客需要到饭店用餐,这就需要定义一个Customer类,并为该类定义一个haveDinner()方法。考虑饭店有三个部门:收银部、厨师部和服务生部,用户就餐需要这三个部门协调才能完成。UML类图如下。下面笔者给出实现的类。定义一个Payment的接原创 2016-03-11 23:26:59 · 465 阅读 · 0 评论 -
桥接模式
桥接模式是一种结构模式,它主要应对的是:由于实际的需要,某个类具有两或两个以上的维度,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿。假设现在需要为某个餐厅制造菜单,餐厅供应牛肉面、猪肉面……而且顾客可根据自己的口味选择是否添加辣椒。此时就产生了一个问题,如何应对这种变化;是否需要定义辣椒牛肉面、无辣椒牛肉面、辣椒猪肉面、无辣椒猪肉面4个子类?如果餐厅还提供羊肉面韭菜面……呢?如原创 2016-03-11 23:31:24 · 505 阅读 · 0 评论 -
观察者模式
观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。当主题对象的状态发生变化,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够自动更新。在观察者模式中,被发现的对象常常也称为目标或主题(Subject),依赖有对象被称为观察者(Observer)。下面提供一个观察者接口,程序中所有观察者都应该实现该接口。 public interface原创 2016-03-11 23:35:20 · 411 阅读 · 0 评论 -
代理模式
如果客户端代码不能或不想直接访问被调用对象——这种情况有很多原因,比如需要创建一个系统开销很大的对象,或者被调用对象在远程主机上,或者目标对象功能还不足以满足需求…..而是额外创建一个对象返回给客户端使用,那么这种设计方式就是代理模式。如下给出了UML类图。下面笔者给出了实现的方法。1) Image接口类。 public interface Image{原创 2016-03-10 23:23:51 · 431 阅读 · 0 评论 -
抽象工厂
接着上一节的设计模式,我们这里增加一个OutputFactoryFactory工厂类,这个工厂类提供一个getOutputFactory(String type)方法,该方法用于返回一个OutputFactory工厂实例。这个特殊的工厂我们称之为抽象工厂,下面是抽象工厂的UML类图。下面笔者给出实现的代码。 1) OutputFactoryFactory的类。原创 2016-03-10 23:19:09 · 334 阅读 · 0 评论 -
工厂方法
上一章节笔者介绍的简单工厂,是将Printer和BetterPrinter的类归于一个工厂来管理。那么这一章节就是将Printer由PrinterFactory来管理,BetterPrinter由BetterPrinterFactopry来管理。UML类图如下。下面笔者将给出上面模式的代码。1) OutoutFactory的类。public interface原创 2016-03-10 23:14:57 · 350 阅读 · 0 评论 -
简单工厂
将多个类对象交给工厂类来生成的设计方式称为简单工厂模式。可能这样说,大伙会比较难以理解。下面我们打个比方。现在我们有两台打印机,一台是普通的打印机,那么实验室的打印就是普通打印,我们取名为:Printer; 当然我们还有一如打印,是快速打印,所以我们取名为BetterPrinter。现在有一台电脑,它去调用打印机,如果初学者,可能用的方法就是,直接使用那个,那么就去new哪个。而工厂模式的使用会我原创 2016-03-10 23:10:40 · 385 阅读 · 0 评论 -
JDK动态代理
借助于Java提供的Proxy和InvocationHandler,可以实现在运行时生成动态代理的功能,而动态代理对象可作为目标对象使用,而且增加了目标对象的功能。下面我们将要实现一个类似于JDK的动态代理。设计的UML类图如下。下面笔者给出的实现方法。1) 提供一个Dog接口。public interface Dog{ // info()方法声明 vo原创 2016-03-10 23:27:08 · 387 阅读 · 0 评论