设计模式
Fred-XU
https://www.zhihu.com/people/fredric-96
展开
-
设计模式(访问者模式)
今天看淘宝的corba源码,其SQL语句的解析采用了visitor模式。visitor用在对复杂数据结构的操作,对数据结构中每个元素的操作可能变化,但不影响结构本身。基本代码如下:针对每个需要被访问的元素,继承接口Visitablepublic interface Visitable { public void accept(Visitor visitor);}publi...原创 2013-04-18 16:30:00 · 104 阅读 · 0 评论 -
设计模式(责任链模式)
当多个对象都存在处理请求的情况时,通过构造一条处理责任链,将请求者和处理者解耦。这样具体的处理方式和处理顺序都可以灵活调整。代码如下:Handlerpublic abstract class Handler { public Handler next; public Handler setNext(Handler handler){ this....原创 2015-06-13 08:48:00 · 242 阅读 · 0 评论 -
设计模式(命令模式)
命令行把请求和操作封装起来,坦白的讲,我现在还不是特别理解,也没有再具体的项目中使用过,感觉有点过于复杂。本文参考一些材料,给出一个简单的例子。如下:Tradepublic class Trade { public void doSell(){ System.out.println("doSell"); } public void ...原创 2015-06-13 14:16:00 · 291 阅读 · 0 评论 -
设计模式(解释器模式)
解释器模式,包含如下几类角色:context: 全局上下文,将作为参数传入解释器 Interpret:解释器的抽象,本例中是Expression ConcreteInterpret:某个具体的解释器,本例中是OneExpression代码如下:Contextpublic class Context { private String value; publ...原创 2015-06-13 14:30:00 · 197 阅读 · 0 评论 -
设计模式(迭代器模式)
迭代器模式是实现了一种访问容器的方法,在java中运用很普遍,不做赘述。如下:public class App { public static void main(String[] args) { List list = new ArrayList(); list.add("aa"); list.add("bb"); ...原创 2015-06-13 14:36:00 · 107 阅读 · 0 评论 -
设计模式(中介者模式)
中介者模式提供一个统一的中介接口Mediator,与多个目标对象交互。如下图:代码如下:Mediatorpublic abstract class Mediator { public abstract void notice(String content);}ConcreteMediatorpublic class ConcreteMediator extends...原创 2015-06-15 09:09:00 · 174 阅读 · 0 评论 -
设计模式(备忘录模式)
备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,属于行为模式。它是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。它包含以下几类角色:1、Memento:备忘数据的bean;2、Originator:发起者,需要备份数据的对象,其备份内容与Memento相同,负责创建一份备份数据,并能够通过备...原创 2015-06-15 09:48:00 · 103 阅读 · 0 评论 -
设计模式(观察者模式)
观察者模式类似订阅的功能,当目标对象的数据或行为发生变化时,相应的观察者会产生变化。最基本的例子就是在目标对象中维护一个观察者的列表。代码如下:Observerpublic abstract class Observer { public abstract void doSomething();}ConcreteObserverpublic class Concret...原创 2015-06-15 09:59:00 · 105 阅读 · 0 评论 -
设计模式(状态模式)
状态机的使用在各类项目中使用都比较多,设计模式中的状态模式是将状态机的维护抽象出来,并由需要支持改状态机的对象维护起来。本文给出一个简单的例子:Statepublic abstract class State { protected int type; public abstract void handler(int input); public abstrac...原创 2015-06-15 10:13:00 · 106 阅读 · 0 评论 -
设计模式(策略模式)
策略模式很简单,类似于C里维护一个函数指针,只是将具体策略抽象出来并维护。代码如下:Strategypublic interface Strategy { public void doMethod();}ConcreteStrategypublic class ConcreteStrategy implements Strategy { @Overrid...原创 2015-06-15 10:21:00 · 193 阅读 · 0 评论 -
设计模式(代理模式)
代理模式即某个对象代理其他对象并对外提供功能,如下例ProxyFuncImpl 代理FuncImpl对外提供功能。Funcpublic interface Func { public void doAction();}FuncImplpublic class FuncImpl implements Func { @Override public vo...原创 2015-06-13 08:28:00 · 129 阅读 · 0 评论 -
设计模式(享元模式)
享元模式可以理解是一个对象的缓存,通过构建一个享元工厂对所有的对象进行管理。代码如下:Flyweight 享元的接口public interface Flyweight { public void doAction();}FlyweightImpl 具体被共享的类实现public class FlyweightImpl implements Flyweight{ ...原创 2015-06-13 08:17:00 · 98 阅读 · 0 评论 -
设计模式(简单工厂模式)
简单工厂主要用以替代类的创建,通常我们是在类A中去new 类B,如果此时B具有较多的可能性,则需要将A、B解耦。如下图所示:如本例中,报表保存方式可以是pdf、csv,因此我们将其接口抽象出来,并以一个工厂方法对外提供。抽象接口ReportSavepublic interface ReportSave { public void save();}实现类ReportPd...原创 2015-06-12 09:41:00 · 96 阅读 · 0 评论 -
设计模式(抽象工厂模式)
抽象工厂是简单工厂基础上的封装,与简单工厂产生具体的某一个对象不同,抽象工厂用以产生一系列有关联的具体对象。抽象工厂和简单工厂可以一起使用,如下图:备注:本例中直接打印。抽象工厂EnterFactorypublic interface EnterFactory { public void createEnterInfo(); public void create...原创 2015-06-12 10:13:00 · 318 阅读 · 0 评论 -
设计模式(单例模式)
单例及面向对象语言中对全局变量控制的一种方式,比较简单,如下例所示:public class DataSingleton { private static DataSingleton instance; public DataSingleton(){ System.out.println("DataSingleton created"); }...原创 2015-06-12 10:32:00 · 103 阅读 · 0 评论 -
设计模式(建造者模式)
建造者模式用于创建相对复杂,组成较多的对象。它包括几类角色:Product: 待被创建的对象,本例中是Table builder:创建对象方法的抽象,本例中是TableBuilder ConcreteBuilder:具体某个创建的实现,本例中是TableBuilderImpl Director:封装builder接口类图关系如下:代码如下:Tablepackage co...原创 2015-06-12 14:14:00 · 99 阅读 · 0 评论 -
设计模式(适配器模式)
适配器模式主要用于接口的适配,在实际产品开发中诸如老版本升级,切换平台等等都会有实际的应用。即将一个老接口封装成新接口并暴露出去,在java中的典型实现如下:Adapter(适配器)//适配器public class Adapter extends Adaptee implements TargetOperation { @Override public voi...原创 2015-06-12 15:00:00 · 241 阅读 · 0 评论 -
设计模式(桥接模式)
桥接模式是针对某个类如果存在多个维度的变化时,将不同变化的维度单独抽象出来,独自变化。如下例:之前的设计:采用桥接模式:代码如下:Color (颜色的抽象)public abstract class Color { public void draw(){};}BlueColor(颜色的具体实现)public class BlueColor extend...原创 2015-06-12 15:32:00 · 110 阅读 · 0 评论 -
设计模式(组合模式)
组合模式是为了解决业务中“局部-整体”的关系,这里的局部整体互相嵌套,且具备相同的处理接口。典型的角色是两个:component:包含自身抽象列表的类,下例中为Employee; composite:各个组成部分对外暴露的处理接口,下例中为toString,为单独抽象;代码如下:Employeepackage com.example;import java.util.Arr...原创 2015-06-12 16:27:00 · 98 阅读 · 0 评论 -
设计模式(装饰模式)
装饰模式用于给对象动态而灵活的添加属性,主要包含如下几个角色:Component:定义一个对象接口,可以给这些对象动态地添加职责,本例中是Product ConcreteComponent:具体的对象,用以被添加属性,本例中是ProductImpl,通过addAttribute被添加属性 Decorator:装饰器的抽象,维持一个Component指针,并继承该指针;本例中是BaseCha...原创 2015-06-12 17:38:00 · 159 阅读 · 0 评论 -
设计模式(外观模式)
外观模式(Facade)是运用比较多的一种设计模式,简单而言就是将多个子系统的能力封装后对外暴露,即将子系统的功能组合成一个复杂功能。如下图:SystemFacadepublic class SystemFacade { private OneSystem one; private TwoSystem two; public SystemFacade(...原创 2015-06-13 08:00:00 · 122 阅读 · 0 评论 -
设计模式(模板方法)
模板方法是通过抽象类定义各一个基础模板,这个模板中有已经实现的,也有要求强制子类实现的。通过这个模板的定义来实现有约束的业务继承。代码如下:Templatepublic abstract class Template { public void templateMethod(){ baseMethod(); subMehtod(); }...原创 2015-06-15 10:53:00 · 215 阅读 · 0 评论