不管你是初级的Coder还是高级的程序员,都离不开设计模式的“画龙点睛”
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,从而使你写的代码可重用性更高、可读性更强、可靠性更高、灵活性更好、可维护性更强
最硬核的是使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期,简单来讲就是减少重复造“轮子”
在阅读本文之前,希望您具备最基本的代码编写能力
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。
四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
至于设计模式的用途以及学习的好处这里就不多做介绍了。
根据模式是用来完成什么工作来划分
创建型模式(5种)
用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
– 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
结构型模式(7种)
用于描述如何将类或对象按某种布局组成更大的结构。
– 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式(11种)
用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。
– 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模 式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
根据模式是主要用于类上还是主要用于对象上来分
类模式(4种)
用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。
– 工厂、适配器、模板方法、解释器
对象模式(19种)
用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。
– 除了上面4种类模式,其他的都是对象模式
大堆理论不再叙述,这里直接敲重点
开闭原则(Open Close Principle)
含义:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
精髓:对扩展开放,对修改关闭
里氏代换原则(Liskov Substitution Principle)
依赖倒转(倒置)原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
接口隔离原则(Interface Segregation Principle)
含义
由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
在具体应用接口隔离原则时,应该根据以下几个规则来衡量。
迪米特法则(又称最少知道原则)(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
迪米特法则的定义是:只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
合成复用原则(Composite Reuse Principle)
合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。
使用最有趣的典故和生动的故事对各个模式进行剖析
通俗易懂,简单易上手,平均三分钟搞懂一种设计模式,娱乐高效率学习
关于更多详细内容,有兴趣的朋友可以关注微信公众号【大数据编程】一起交流学习,有问题在后台随时私信,作者有空必回。