Java设计模式博客全文件夹

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567


今天来对这23种设计模式做个总结。咱使用设计模式的目的是为了可重用代码、让代码更easy被他人理解、保证代码可靠性。当然设计模式并非万能的。项目中的实际问题还有详细分析。

咱不能为了使用设计模式而使用,而是在分析问题的过程中。想到使用某种设计模式能达到咱须要的效果,并且比不使用设计模式更有优势。那么咱该考虑使用设计模式了。


一、设计模式的一般分类

创建型(Creator)模式(共5种):单例、原型、建造者、工厂方法、抽象工厂。

结构型(Structure)模式(共7种):适配器、代理、外观、桥接、组合、享元、装饰者。

行为型(Behavior)模式(共11种):策略、观察者、模板方法、迭代器、责任链、命令、备忘录、状态、訪问者、中介者、解释器。


二、以下谈谈我对这23种设计模式的理解

1、创建型(Creator)模式(共5种)

①单例(Singleton)是一种经常使用的设计模式。

在Java应用中。单例对象能保证在一个JVM中。该对象仅仅有一个实例存在。实现方式主要有饿汉式和懒汉式两种。

原型(Prototype):该模式的思想就是将一个对象作为原型,对其进行复制、克隆。产生一个和原对象类似的新对象。实现方式主要有浅复制和深复制两种。

浅复制的关键是super.clone();而深复制,须要採用二进制流的形式写入当前对象,再对其进行读取。

③建造者(Builder):该模式是将各种产品集中起来进行管理。将非常多功能集成到一个类里,这个类能够创造出比較复杂的东西。

它关注的是创建复合对象,多个部分。

④工厂方法(Factory method):调用工厂里的方法来生产对象(产品)的。

它有3种实现方式:1)普通工厂模式:就是建立一个工厂类。对实现了同一接口的一些类进行实例的创建)。2)多个工厂方法模式:是对普通工厂方法模式的改进,在普通工厂方法模式中,假设传递的字符串出错。则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法。分别创建对象。3)静态工厂方法模式:将上面的多个工厂方法模式里的方法置为静态的,不须要创建实例,直接调用就可以。假设你想使用工厂方法模式能够优先选择:静态工厂方法模式。

⑤抽象工厂(Abstract factory):顾名思义,就是把工厂抽象出来,不同的工厂生产不同的产品。


2、结构型(Structure)模式(共7种)

①适配器(Adapter):将某个类的接口转换成client期望的还有一个接口表示,目的是消除因为接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

1)类的适配器模式:当希望将一个类转换成满足还有一个新接口的类时,能够使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口就可以。2)对象的适配器模式:当希望将一个对象转换成满足还有一个新接口的对象时,能够创建一个Adapter类,持有原类的一个实例,在Adapter类的方法中,调用实例的方法就可以。

3)接口的适配器模式:当不希望实现一个接口中全部的方法时,能够创建一个抽象类Adapter实现全部方法,我们写别的类的时候。继承抽象类就可以。

②代理(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些操作。比方咱有的时候打官司须要请律师。由于律师在法律方面有专长,能够替咱进行操作表达咱的想法,这就是代理的意思。有两种实现方式:静态代理(不使用JDK里面的方法)、动态代理(InvocationHandler和Proxy)。

③外观(Facade):也称门面模式。

外观模式是为了解决类与类之间的依赖关系的。像spring一样,能够将类和类之间的关系配置到配置文件里,而外观模式就是将他们的关系放在一个Facade类中。减少了类类之间的耦合度,该模式中没有涉及到接口。

④桥接(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使他们能够各自独立的变化。桥接模式事实上就是一种将N*M转化成N+M组合的思想。

⑤组合(Composite):组合模式有时又叫部分-总体模式。将对象组合成树形结构来表示“部分-总体”层次结构。

⑥享元(Flyweight):运用共享的技术有效地支持大量细粒度的对象。主要目的是实现对象的共享。即共享池。当系统中对象多的时候能够降低内存的开销。在某种程度上。你能够把单例看成是享元的一种特例。

装饰者(Decorator):动态地将责任附加到对象上,若要扩展功能。装饰者提供了比继承更具有弹性的替代方案。保持接口。增强性能。


行为型(Behavior)模式(共11种)

①策略(Strategy)让用户能够选择运行一个动作的方法,也就是说,用户能够选择不同的策略来进行操作。个人认为策略模式能够用这个公式:不同的XXX 拥有不同的XXX供用户选择。比方说:不同的象棋棋子拥有不同的走法供用户选择。

②观察者(Observer):在对象之间定义了一对多的依赖关系。这样一来,当一个对象改变状态时,依赖它的对象都会收到通知并自己主动跟新。Java已经提供了对观察者Observer模式的默认实现,Java对观察者模式的支持主要体如今Observable类和Observer接口。

③模板方法(Template method):在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够再不改变算法结构的情况下,又一次定义算法中的某些步骤。

简而言之:模板方法定义了一个算法的步骤,并同意子类为一个或多个步骤提供实现。

④迭代器(Iterator):提供了一种方法顺序訪问一个聚合对象中的各个元素。而又不暴露其内部的表示。

⑤责任链(ChainOfResponsibility): 有多个对象,每一个对象持有下一个对象的引用。形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,可是发出者并不清楚终于哪个对象会处理该请求。

⑥命令(Command):将“请求”(命令/口令)封装成一个对象,以便使用不同的请求、队列或者日志来參数化其对象。命令模式也支持撤销操作。

⑦备忘录(Memento): 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象。

⑧状态(State):同意对象在内部状态改变时改变它的行为,对象看起来好像改动了它的类。状态模式说白了就是一个对像有不同的状态,不同的状态相应不同的行为,它事实上是对switch case这种语句的拓展。

解释器(Interpreter):它定义了对象与对象之间进行某种操作之后会得到什么值。

一般主要应用在OOP开发中的编译器的开发中。所以适用面比較窄。


⑩中介者(Mediator):主要用来减少类与类之间的耦合的。由于假设类与类之间有依赖关系的话。不利于功能的拓展和维护,由于仅仅要改动一个对象,其他关联的对象都得进行改动。

訪问者(Visitor):把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。

訪问者模式适用于数据结构相对稳定而算法又easy变化的系统。訪问者模式的长处是添加操作非常easy。由于添加操作意味着添加新的訪问者;而它的缺点就是添加新的数据结构非常困难。


三、Java设计模式菜鸟系列文件夹

Java设计模式菜鸟系列(一)策略模式建模与实现
Java设计模式菜鸟系列(二)观察者模式建模与实现
Java设计模式菜鸟系列(三)装饰者模式建模与实现
Java设计模式菜鸟系列(四)工厂方法模式建模与实现
Java设计模式菜鸟系列(五)抽象工厂模式建模与实现
Java设计模式菜鸟系列(六)单例模式建模与实现
Java设计模式菜鸟系列(七)命令模式建模与实现
Java设计模式菜鸟系列(八)适配器模式建模与实现
Java设计模式菜鸟系列(九)外观模式建模与实现
Java设计模式菜鸟系列(十)模板方法模式建模与实现


Java设计模式菜鸟系列(十一)迭代器模式建模与实现
Java设计模式菜鸟系列(十二)组合模式建模与实现
Java设计模式菜鸟系列(十三)状态模式建模与实现
Java设计模式菜鸟系列(十四)代理模式建模与实现
Java设计模式菜鸟系列(十五)建造者模式建模与实现
Java设计模式菜鸟系列(十六)原型模式建模与实现
Java设计模式菜鸟系列(十七)桥接模式建模与实现
Java设计模式菜鸟系列(十八)责任链模式建模与实现
Java设计模式菜鸟系列(十九)备忘录模式建模与实现
Java设计模式菜鸟系列(二十)解释器模式建模与实现


Java设计模式菜鸟系列(二十一)享元模式建模与实现
Java设计模式菜鸟系列(二十二)中介者模式建模与实现
Java设计模式菜鸟系列(二十三)訪问者模式建模与实现


Java设计模式菜鸟系列教程PDF下载地址:http://download.csdn.net/detail/jave_lover/8714347


原文地址:https://www.cnblogs.com/gccbuaa/p/6789021.html