23种软件设计模式

Posted 孔子-说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23种软件设计模式相关的知识,希望对你有一定的参考价值。

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

一、4个基本要素

1. 模式名称

每一个模式都有自己的名字,通常用一两个词来描述,可以根据模式的问题、特点、解决方案、功能和效果来命名。模式名称(PatternName)有助于我们理解和记忆该模式,也方便我们来讨论自己的设计。

2. 问题

问题(Problem)描述了该模式的应用环境,即何时使用该模式。它解释了设计问题和问题存在的前因后果,以及必须满足的一系列先决条件。

3. 解决方案

模式问题的解决方案(Solution)包括设计的组成成分、它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象的 组合)来解决这个问题。

4. 效果

描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。主要是对时间和空间的衡量,以及该模式对系统的灵活性、扩充性、可移植性的影响,也考虑其实现问题。显式地列出这些效果(Consequence)对理解和评价这些模式有很大的帮助。

二、七大设计原则

设计模式的主要目的为降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。所以在程序设计时,应将程序功能最小化,每个类只干一件事。若在类似功能基础上增加新功能,则要合理使用继承。多方法的调用使用接口,并合理设计接口功能和数量。类之间要符合高内聚低耦合。

1、开闭原则

最基础的设计原则,对扩展开放,对修改关闭。即在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。目的是为了使程序的扩展性好,易于维护和升级,降低维护带来的新风险。

2、依赖倒置原则

要面向接口编程(核心思想),高层不应该依赖低层。目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成,这样更利于代码结构的升级扩展。

3、单一职责原则

实现类要职责单一,一个类只干一件事,实现类要单一。目的是便于理解,提高代码的可读性及系统的可维护性,使变更引起的风险降低。

4、接口隔离原则

一个接口只干一件事,接口要精简单一。目的是为了升级和维护方便,尽量细化接口,即接口中的方法尽量少,使功能解耦,高内聚、低耦合。

5、迪米特法则

降低类之间的耦合度,不该知道的不要知道,一个类应该保持对其它对象最少的了解。就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。目的是只和朋友交流,不和陌生人说话,减少代码臃肿,降低耦合。

6、里氏替换原则

不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义(即不能覆盖父类的非抽象方法)。目的是防止继承泛滥,降低多态运用时的出错几率,提高整个继承体系的可复用性。

7、合成复用原则

尽量使用组合或者聚合关系实现代码复用,其次才考虑使用继承关系来实现。目的是降低代码耦合。

三、设计模式分类

1、创建型模式(5种)

创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。

创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

1.1 JAVA设计模式之工厂方法模式(3种工厂含抽象工厂模式)

1.2 JAVA设计模式之抽象工厂模式

1.3 JAVA设计模式之单例模式(6种实现)

1.4 JAVA设计模式之建造者模式

1.5 JAVA设计模式之原型模式

2、结构型模式(7种)

结构型模式描述如何将类或对象按某种布局组成更大的结构。分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。

2.1 JAVA设计模式之适配器模式

2.2 JAVA设计模式之装饰器模式

2.3 JAVA设计模式之代理模式

2.4 JAVA设计模式之外观模式

2.5 JAVA设计模式之桥接模式

2.6 JAVA设计模式之组合模式

2.7 JAVA设计模式之享元模式

3、行为型模式(11种)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。

行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。

3.1 JAVA设计模式之策略模式

3.2 JAVA设计模式之模板方法模式

3.3 JAVA设计模式之观察者模式

3.4 JAVA设计模式之迭代器模式

3.5 JAVA设计模式之责任链模式

3.6 JAVA设计模式之命令模式

3.7 JAVA设计模式之备忘录模式

3.8 JAVA设计模式之状态模式

3.9 JAVA设计模式之访问者模式

3.10 JAVA设计模式之中介者模式

3.11 JAVA设计模式之解释器模式

以上是关于23种软件设计模式的主要内容,如果未能解决你的问题,请参考以下文章

软件设计师23种设计模式总结

23种软件设计模式

23种软件设计模式

GoF23种(部分)软件设计模式核心理解

java 设计模式:软件设计原则面向对象理论23 种设计模式

java 设计模式:软件设计原则面向对象理论23 种设计模式