什么是设计模式
软件设计模式(Software Design Pattern),又称设计模式。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式的优点
- 可以提高程序员的思维能力、编程能力和设计能力。
- 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
- 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
设计模式六大原则
开闭原则(OCP)
开闭原则(Open Closed Principle),定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
在程序需要进行扩展时,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。
概括:为了使程序的扩展性好,易于维护和升级,需要使用接口和抽象类等。
里氏代换原则
任何基类可以出现的地方,子类一定可以出现。子类对父类的方法尽量不要重写和重载。
一个可以接受基类对象的地方必然可以接受一个子类对象。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,使用子类来替换父类对象。
依赖倒转原则
面向接口编程,依赖于抽象,不依赖于具体。要针对抽象层编程,而不要针对具体类编程。
接口隔离原则
不应该依赖那些它不需要的接口,使用多个专门的接口来取代一个统一的接口。
迪米特原则
又称最少知道原则(Demeter Principle),一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,减少类之间的耦合度。
合成复用原则
系统中应该尽量多使用组合/聚合关系,少用甚至不用继承关系。
在面向对象设计中,可以通过两种基本方法来复用已有的设计和实现,即通过组合/聚合关系或者通过继承。
继承复用:实现简单,易于扩展。但是破坏系统的封装性。从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性,只能在有限的环境中使用。(“白箱”复用)
组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作,可以在运行时动态进行。(“黑箱”复用)
设计模式的分类
目的划分
根据目的来分,分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。
创建型模式
用于描述“怎样创建对象”,它的主要特点是“将对象的创建和使用分离”,增加已有代码的灵活性和可复用性。
创建型模式包括:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式等5种模式。
结构型模式
用于描述如何将类或对象按某种布局组成更大的结构,并同时保持结构的灵活和高效。。
结构型模式包括:代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式等7种模式。
行为型模式
用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。
行为型模式包括:模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种模式。
作用范围划分
类模式
用于处理类与字类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。
类模式包括:工厂方法、(类)适配器、模板方法、解释器。
对象模式
用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。
对象模式包括:抽象工厂模式、单例模式、建造者模式、原型模式、代理模式、桥接模式、装饰模式、外观模式、享元模式、组合模式、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录。
总结
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143362.html