一、设计模式的定义

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。一句话来讲,设计模式一般用来解决不同问题的同一表相。

二、设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果,为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,需要使用接口和抽象类。

2、里氏代换原则(Liskov Substitution Principle)

面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

5、最少知道原则(迪米特法则)(Demeter Principle)

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

尽量使用合成/聚合的方式,而不是使用继承。

三、设计模式的三大类

其中绿色的是经常使用的几种模式。

类型

模式(范围\目的上讲,加粗的为类模式,不加粗的是对象模式)

英文

描述

java源码中应用

创建型模式(5种)

工厂方法

factory

实现松耦合,可以提高扩展性。就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

单例

singleton

某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。

原型

Prototype

将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象

抽象工厂

abstract factory

创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以,提高系统扩展性

建造者

Builder

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,

结构型模式(7种)

(类)适配器

Adapter

有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里

代理

Proxy

为某对象提供一种代理以控制对该对象的访问,

(对象)适配器

Adapter

将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。可以将一个接口转换成客户希望的另一个接口,方便引入外部接口,方便适配其他的接口,提高系统扩展性

java的IO流

桥接

Bridge

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化

装饰器

decorator

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口。装饰对象持有被装饰对象的实例可以扩展接口,提高系统扩展性

外观

Facade

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

享元

Flyweight

实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用

组合

Composite

将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等

行为型模式(11种)

模板方法


很方便地实现不稳定的扩展点,完成功能的重用

解释器


策略


通过新增策略从而改变原来的执行策略

命令


责任链


可以很方便地增加拦截器、过滤器,实现对数据的处理,比如struts2的责任链

状态


观察者


很方便增加观察者,方便系统扩展

中介者


迭代器


访问者


备忘录


JAVA体系结构什么是设计模式 java基本的设计模式_eclipse

 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:

JAVA体系结构什么是设计模式 java基本的设计模式_JAVA体系结构什么是设计模式_02

根据作用范围来分

根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。

  1. 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。工厂方法、(类)适配器、模板方法、解释器属于该模式。
  2. 对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。

strategy(策略)模式的意图是?