引言
什么是设计模式(What)?
设计模式是前人实际经验的积累和总结,都是着重解决实际的问题。
学习设计模式的目的(Why)?
通过学习设计模式来提高写出的代码的可维护性、可复用性、可扩展性和灵活性。也就是说让系统能够达到“高内聚、低耦合”的状态。
怎样学习设计模式(How)?
设计模式是前人的实践经验总结出来的,六大设计原则,23种设计模式;虽然每种模式都有固定的实现方式,但是设计的原则是活的,所以在学习设计模式的过程中要有所思、有所想、有所悟,有良好的理论基础,这样我们在实际运用中才能得心应手。
下面来说说设计模式的一、三、五:
设计模式之一
一抽象:
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。抽象化的目的是为了使复杂度降低。设计模式是面向对象编程,而面向对象编程的基础就是类的抽象化。所以要想学好设计模式,就要学好面向抽象编程的思想。
一法则:
迪米特法则
迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。
核心思想:最少依赖
具体介绍:设计模式六大原则——迪米特法则(LOD)
设计模式之三
三大特性
1、封装
把事物的状态和行为的实现细节封装在类中,形成一个可以重复使用的“零件”,被成千上万对其内部毫不知情的工作人员使用。
2、继承
“Is-a”的的关系,表示一个类是另一个类的特殊种类。
3、多态
不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
三大类别
1、创建型模式
处理对象的创建过程。创建型模式将类的实例是如何被创建和放在一起的这些关于具体类的的信息封装起来,创建一个公用的“零件”,也就是接口,来和外部链接,这样减少了类与类之间的紧密程度,内部完整——高内聚,与外部的连接灵活——低耦合。
例:创建一个抽象的动物类,只知道动物类是有生命的个体,都可以进行新陈代谢和繁殖。
2、结构型模式
用来处理类或者对象的组合。就是描述类和对象之间怎样组织起来形成大的结构,从而实现新的功能。
例:创建型创建了一个抽象的动物类,那么结构型模式就是对这个类进行修饰加工,加上强健的四肢,如:狮子,加上翅膀:如鹰,加上鳃:如鲤鱼。
3、行为型模式
用来对类或者对象怎样交互和怎样分配职责进行描述。
例:结构型模式对创建的类进行了修饰加工,而行为型模式则是赋予被修饰后的类一些特性,例:对狮子的四肢进行合理设计,从而让狮子能够在陆地上风驰电掣;对鹰的翅膀进行合理设计,让鹰能够翱翔九天;对鱼的鳃进行合理设计,让鲤鱼能够畅游海底。
23中设计模式的具体分类:
设计模式之五
五大原则
1、开放-闭合原则
软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。意思就是在一个系统中,增加程序的功能时,不应该改动原有代码,只要增加新的代码即可;开闭原则是核心原则,一切的一切都围绕开闭原则展开的。
2、依赖倒置原则
细节是多变的,而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段。
3、里氏代换原则
子类型必须能够替换掉他们的父类型。限制变化影响的范围。
4、合成/聚合复用原则
要尽量使用合成和聚合,尽量不要使用继承。
具体介绍:设计模式六大原则——合成/聚合复用原则(CARP)
里氏代换原则和合成/聚合复用原则都是对开放闭合原则使用时的规范。
5、单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。
五大关系
在设计模式中涉及的五种关系:依赖、关联(聚合、组合)、实现、继承,用设计模式中一张经典的图来作解释:
总结
学习设计模式的基础就是理解设计原则,我们学的所有的设计模式都离不开设计原则,都是按照一定的设计原则进行的,所以设计原则是一定要掌握的,无论你在实际项目中是否应用了设计模式,设计原则是一定要遵守的编程准则。