Java设计模式总结(前言)

mp.weixin.qq.com/s?__biz=MzI…

起设计模式,不少人都会以为这个概念很熟悉,会想到单例模式、工厂模式等等,可是彷佛又说不出来什么,说不上它的核心思想和设计原则。其实咱们的项目中,为了代码复用,增长可维护性,不少地方都用到了设计模式,它的思想和设计精髓贯穿每个系统设计。面试


今天整理了一下之前的项目和笔记,发现也只不过用到了经常使用的几种设计模式,还有不少我闻所未闻,甚至连模式的名字都没有听过,它们提供了软件开发过程当中面临的通常问题的最佳解决方案。学习这些模式有助于经验不足的开发人员经过一种简单快捷的方式来学习软件设计。因此决定写这个系列文章,学习的同时和你们一块儿分享。在具体到每个设计模式的实例以前,我以为有必要先简单认识和了解一下什么是设计模式,先对这些概念有一个大概的印象,而后再深刻下去。编程


设计模式简介设计模式

设计模式(Design pattern)表明了最佳的实践,一般被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程当中面临的通常问题的解决方案。这些解决方案是众多软件开发人员通过至关长的一段时间的试验和错误总结出来的。网络

设计模式是一套被反复使用的、多数人知晓的、通过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石同样。项目中合理地运用设计模式能够完美地解决不少问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被普遍应用的缘由。布局


设计模式基本要素学习

设计模式主要有四个基本要素:ui

  • 模式名称(pattern name):一个助记名,它用以两个词来描述模式的问题、解决方案和效果。设计

  • 问题(problem):描述了应该在什么时候使用模式。3d

  • 解决方案(solution):描述了设计的组成成分,他们之间的相互关系及各自的职责和协助方式。代理

  • 效果(consequendes):描述了应用的效果及使用模式应权衡的问题。


设计模式分类

设计模式主要分为三大类:

建立型模式:用于描述“怎样建立对象”,它的主要特色是“将对象的建立与使用分离”。主要有如下5种模式:

  • 工厂方法模式(Factory Pattern)

  • 抽象工厂模式(Abstract Factory Pattern)

  • 单例模式(Singleton Pattern)

  • 建造者模式(Builder Pattern)

  • 原型模式(Prototype Pattern)


结构型模式:用于描述如何将类或对象按某种布局组成更大的结构。主要有如下7种模式:

  • 适配器模式(Adapter Pattern)

  • 装饰器模式(Decorator Pattern)

  • 代理模式(Proxy Pattern)

  • 外观模式(Facade Pattern)

  • 桥接模式(Bridge Pattern)

  • 组合模式(Composite Pattern)

  • 享元模式(Flyweight Pattern)


行为型模式:用于描述类或对象之间怎样相互协做共同完成单个对象都没法单独完成的任务,以及怎样分配职责。主要有如下11种模式:

  • 策略模式(Strategy Pattern)

  • 模板方法模式(Template Pattern)

  • 观察者模式(Observer Pattern)

  • 迭代器模式(Iterator Pattern)

  • 责任链模式(Chain of Responsibility Pattern)

  • 命令模式(Command Pattern)

  • 备忘录模式(Memento Pattern)

  • 状态模式(State Pattern)

  • 访问者模式(Visitor Pattern)

  • 中介者模式(Mediator Pattern)

  • 解释器模式(Interpreter Pattern)

下面是我画的一张设计模式归类图,你们参考一下:


设计模式遵循原则

设计模式遵循6大原则,分别为:

  • 开闭原则(Open Close Principle):对扩展开放,对修改关闭。 

  • 里氏代换原则(Liskov Substitution Principle):只有当衍生类能够替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也可以在基类的基础上增长新的行为。

  • 依赖倒转原则(Dependence Inversion Principle):这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。

  • 接口隔离原则(Interface Segregation Principle):使用多个隔离的接口来下降耦合度。 

  • 迪米特法则(最少知道原则)(Demeter Principle):一个实体应当尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立。

  • 合成复用原则(Composite Reuse Principle):原则是尽可能使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

设计模式之间的关系


(此图不是我画的,是网络图,我也没有彻底弄懂,接下来的实例中我会慢慢摸索。)


以上是整理的关于设计模式一些概念性的东西,不论是应付面试仍是真心想学习设计模式提升本身软件开发技能的人员,均可以记一下,加深设计模式在咱们脑海中的印象。下一篇开始,将介绍经常使用设计模式的具体实例。


若是以为本文有用,请推荐给更多有须要的人,谢谢!若是发现问题,欢迎留言,请随时批评改正,谢谢!

相关文章
相关标签/搜索