Java设计模式-目录

##1、分类

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

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

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

##2、23种模式的含义

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

(1)单例(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。实现方式主要有饿汉式和懒汉式两种。

(2)原型(Prototype):该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。实现方式主要有浅复制和深复制两种。浅复制的关键是super.clone();而深复制,需要采用二进制流的形式写入当前对象,再对其进行读取。

(3)建造者(Builder):该模式是将各种产品集中起来进行管理。将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。它关注的是创建复合对象,多个部分。

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

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

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

(1)适配器(Adapter):将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
1)类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
2)对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Adapter类,持有原类的一个实例,在Adapter类的方法中,调用实例的方法就行。
3)接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Adapter实现所有方法,我们写别的类的时候,继承抽象类即可。

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

(3)外观(Facade):也称门面模式。外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口。

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

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

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

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

###3、行为型(Behavior)模式(共11种)

(1)策略(Strategy)让用户可以选择执行一个动作的方法,也就是说,用户可以选择不同的策略来进行操作。个人觉得策略模式可以用这个公式:不同的XXX 拥有不同的XXX供用户选择。比如说:不同的象棋棋子拥有不同的走法供用户选择。

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

(3)模板方法(Template method):在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤。简而言之:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。

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

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

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

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

(8)状态(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式说白了就是一个对像有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展。

(9)解释器(Interpreter):它定义了对象与对象之间进行某种操作之后会得到什么值。一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。

(10)中介者(Mediator):主要用来降低类与类之间的耦合的,因为如果类与类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。

(11)访问者(Visitor):把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定而算法又容易变化的系统。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者;而它的缺点就是增加新的数据结构很困难。

##3、设计模式原则

总原则-开闭原则
对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。

(1)单一职责原则
不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。

(2)里氏替换原则(Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
里氏代换原则是对“开-闭”原则的补充。实现“开闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

(3)依赖倒转原则(Dependence Inversion Principle)
面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

(4)接口隔离原则(Interface Segregation Principle)
每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

(5)迪米特法则(最少知道原则)(Demeter Principle)
一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

(6)合成复用原则(Composite Reuse Principle)
尽量首先使用合成/聚合的方式,而不是使用继承。

##4、设计模式详解

创建型模式:工厂方法模式抽象工厂模式单例模式

结构型模式:适配器模式装饰者模式代理模式外观模式

行为型模式:策略模式模板方法模式观察者模式命令模式

剩下的设计模式,我们以后再慢慢补充。

注:
以上关于设计模式的学习,主要都是来源于网络和以下两位大神的博客,
23种设计模式汇总整理Java设计模式博客全目录,在此感激两位的辛苦劳作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪舞飞影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值