java中的常用设计模式

一、设计模式的定义

设计模式(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设计模式总结之六大设计原则 - pony1223 - 博客园


三、设计模式的三大类

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

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

英文

描述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的责任链
状态

观察者

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

迭代器

访问者

备忘录

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

根据作用范围来分

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肆〇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值