23种设计模式的索引

设计模式是很多前人留下的经验总结,这些模式都是很典型的也是很有代表意义的。因此掌握好设计模式是提高个人技术能力的捷径。设计模式要全部掌握,必须进行不断的总结和实现,傻蛋最近总结了一下23种(+简单工厂)设计模式的索引,以方便大家明白各种模式都有什么作用,在遇到问题的时候能够迅速地找到解决方案,同时加以使用,以便能够更快的掌握。

1.Simple Factory(简单工厂)::提供一个创建对象实例的集合,而无须关心其具体实现。被创建的类型可以是接口、抽象类也可以是具体类。
 
简单工厂的本质:选择实现。
 
2.Facade(外观):为子系统中的一组接口提供了一个统一一致的界面,该模式定了一个高层接口,这个接口使得这一子系统更加容易使用。
 
外观模式的本质:封装交互,简化应用。
 
3.Adapter(适配器):将一个类的接口装换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
 
适配器模式的本质:转换匹配,服用功能。
 
4.Singleton(单例):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
 
单例模式的本质:控制实例的数目。
 
5.Factory Method(工厂方法):定义一个用于创建对象的接口,让子类来决定实例化哪一个类,该模式使一个类的实例化延迟到子类,即是让父类在不知道具体实现的情况下,完成自身的功能调用,具体的实现延迟到子类。
 
工厂方法的本质:延迟到子类来选择实现。
 

6.Abstract Factory(抽象工厂):提供了一个创建一系列相关或者“相互依赖对象的接口”,而无需指定他们的具体类。也就是说既要创建接口的对象,同时还要约束它们之间的关系。可以类比创建主板和CPU对象,但是Intel的CPU只能插在支持Intel主板的插槽上面。在实现App的DAO的时候,通常可以使用抽象工厂结合工厂方法的方式来实现。
 
抽象工厂的本质:选择产品簇的实现。
 
7.Builder(构建者):将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类比文件的导出问题,每种文件都有文件的头、文件Body、和文件尾和最终的导出,所以对于不同的文件的构建方式相同但是表现方式不同。
 
构建者模式的本质:分离整体构建算法和部件的构造。
 
8.Prototype(原型):用原型实例创建对象的种类,并通过copy这些原型创建新的对象。会用到Clone方法。类比处理订单(大订单分成若干个小的订单)问题,订单有企业订单和个人订单,其实其操作过程是相似的。
 
原型模式的本质:克隆生成对象。
 
 
9.Mediator(中介): 用一个中介对象来封装一系列的对象交互。中介者使得各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。类比主板用于和各种配件之间交流,而不需要各种配件之间交流。当处理部门和员工之间关系时,此模式就很好,比如部门的解散会影响到部门中的人员,部门和人员之间实现了紧耦合,使用中介者就可以变为松耦合,部门不知道员工,员工不知道处于哪个部门。
 
中介模式的本质:封装交互。
 
10.Proxy(代理):为其他对象提供一种代理以控制对这个对象的访问。如spring中的AOP。或者对于大数据量列表的加载,当需要知道某条数据的详细信息的时候才通过Proxy来访问真实对象。
 
代理模式的本质:控制对象的访问。
 
11.Observer(观察者):定义对象之间的一种一对多的依赖关系。当目标对象发生状态的改变时,所有的观察者对象都会得到通知,从而自动更新。
 
观察者模式的本质:触发联动
 
12.Command(命令): 客户端只是想要发出命令或者请求,而不关心请求的真正接收者是谁,也不关心具体的实现是如何的,而且对于同一个请求的动作可以有不同的请求内容,当然具体的处理功能也就不同。所以命令模式就是将一个请求封装成一个对象,从而可以使你可以用不同的请求对客户的请求进行参数化,请求可以进行排队,同时也支持请求的“可撤销操作”。
    命令模式可以用于宏命令,就是一个大的命令中包含着一组小的命令。同时也可以处理队列请求,就是指对命令的对象进行排队,组成工作队列,然后依次取出命令对象来进行执行。
    
 
命令模式的本质:封装请求。
 
13.Iterator(迭代器):提供一个方法顺序的访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式对于处理对数据库数据的翻页等事件是很好的,传统的方式有二:1.每翻一页就请求一次数据库。2.把所有数据都加载在数据库中。而迭代模式可以很好的实现一次访问数据库,就只趣比如10页,这样就不用每次都从数据库中取了。既节省了时间,也节省了内存。
 
迭代器模式的本质:控制访问聚合对象中的元素。
 
14.Composite(组合):组合模式主要用于表示“树-叶子”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,既组合模式通过引入一个抽象类,作为树类别和叶子别的父类,这样就把树对象和叶子对象统一起来,用户在使用的时候,始终是在操作此抽象的组件对象而不用区分其实树对象还是叶子对象。其最关键的还是这个抽象类,这样无论是对树操作还是叶子操作都具有了一致性。
 
组合模式的本质:统一叶子对象和树对象
 
15.Template Method(模板方法):定义一个操作中的算法骨架,从而让将一些方法的实现延迟到子类中,在不同的子类中,对这些方法的实现可以进行重写。对于用有很多重复、相似的操作的业务处理,就可以用这个方法。
在Java中通常就使用 继承的方法和回调的方式,使得父类可以访问子类的方法,所以模板方法有两种实现方式,继承的方式和回调的方式,继承的方式相对简单,而回调的方式相对地灵活。
 
模板方法的本质:固定算法骨架。
 
16.Strategy(策略):定义一系列的算法,并把它们一个个地封装起来,并且使它们可以相互替换,本模式可以使算法可以独立于使用它的客户端的变化而变化。策略的重心不是如何来实现算法,而是如何组织、调用这些算法,从而让程序结构更加灵活,具有更好的扩展性。
 
策略的本质是:分离算法、选择实现。
 
17.State(状态模式):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。即对于同一个业务,在各个状态下的处理基本上都是不同的,因此把每个状态所对应的功能处理封装在一个独立的类中,这样在选择不同处理的时候,其实就是在选在不同的状态处理类。
 
状态模式的本质:根据状态来分离和选择行为。
 
18.Memento(备忘录模式):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。备忘录的典型应用是 离线存储。
 
备忘录模式的本质:保存和恢复内部状态。
 
19.Flyweigth(享元模式):运用共享技术有效地支持大量细粒度的对象。典型的应用就是对权限的控制。
 
享元模式的本质:运用共享技术有效地支持大量细粒度的对象。
 
20.Interpreter(解释器模式):当读取xml时,xml文件发生了改变,相应的解释程序也会发生改变。用来解决这个问题的方法是解释器模式。相当于定义一个语言,同时定义一个它的语法表示,并且定义一个解释器,这个解释器就是用该表示来解释语言中的句子。
 
解释器模式的本质:分离实现、解释执行。
 
21.Decorator(装饰模式):动态地给一个对象添加一些额外得职责。对增加功能来说,装饰模式比生成子类更为灵活。装饰模式也能用来实现AOP。
 
装饰模式的本质:动态组合。
 
22.Chain of Responsibility(责任链):使多个对象都有机会来处理请求,从而避免请求的发送者和接收者的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有个一对象处理它为止。责任链模式主要是用来处理。责任链就是用来处理 客户端发来一个请求,有多个对象都有机会来处理这个请求,但是客户端不知道究竟是谁来处理这个对象。这样就实现了请求者和接收者解耦,这样就可以动态地切换和组合接收者了。
 
责任链的本质:分离职责,自由组合。
 
23.Bridge(桥接模式):将抽象部分和它的实现部分分离,使它们都可以独立的变化。所谓桥接就是在抽象和实现之间搭桥,让它们能够连接起来,可以相互通讯。抽象一定是要实现的,所以就需要搭一个桥,让抽象部门通过这个桥就可以调用到实现部分的功能,这样就实现了抽象和实现的彻底分离,抽象部分和实现部分可以独立的变化。
 
桥接模式的本质:分离抽象和实现。
 
24.Visitor(访问者):作用于某个对象中各个元素的操作,它使在不改变各个元素的类得前提下定义作用于这些元素的操作。
 
访问者模式的本质:预留通路,回调实现。

你可能感兴趣的:(设计模式,spring,AOP,工作,算法,数据库)