【设计模式】概述

一、设计模式意义

引用鲁迅《故乡》的一句话

设计模式本是无所谓有、无所谓无的,设计的人多了,也便成为了模式

推荐一篇很不错的博客如何通俗理解设计模式及其思想



二、设计模式分类

2.1 二十三种经典设计模式

Gang of Four(四人组)是《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式)的作者。包括:

  • Erich Gamma
  • Richard Helm
  • Ralph Johnson
  • John Vlissides
创建型模式(5种)结构型模式(7种)行为型模式(11种)
单例模式适配器模式模板方法模式
工厂方法模式装饰模式策略模式
抽象工厂模式外观模式状态模式
建造者模式代理模式命令模式
原型模式桥接模式责任链模式
组合模式观察者模式
享元模式中介者模式
备忘录模式
解释器模式
迭代器模式
访问者模式

2.2 其它常用设计模式

除过23种经典的设计模式之外,还有一些设计模式也很常用。比如:

  • 并发型模式
  • 线程池模式
  • 简单工厂模式



三、设计模式原则

3.1 开闭原则(Open Close Principle)——总原则

  • 开闭原则的意思是:对扩展开放,对修改关闭。

  • 在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。

  • 简言之,是为了使程序的扩展性好,易于维护和升级。

  • 想要达到这样的效果,我们需要使用接口和抽象类。

3.2 单一职责原则(Single responsibility principle)

  • 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。

3.3 里氏替换原则(Liskov Substitution Principle)

  • LSP是面向对象设计的基本原则之一。

  • 任何基类可以出现的地方,子类一定可以出现。

  • LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

  • LSP是对“开-闭”原则的补充。

  • 实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3.4 依赖倒置原则(Dependence Inversion Principle)

  • 这个原则是开闭原则的基础。

  • 针对接口编程,依赖于抽象而不依赖于具体。

3.5 接口隔离原则(Interface Segregation Principle)

  • 每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。

  • 使用多个隔离的接口,比使用单个接口要好。

3.6 迪米特法则 / 最少知识原则(Demeter Principle)

  • 一个类对自己依赖的类知道的越少越好。

  • 也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。

  • 这样当被依赖的类变化时,才能最小的影响该类。

  • 最少知识原则的另一个表达方式是:

    只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。
    耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。
    局部变量、临时变量则不是直接的朋友。
    我们要求陌生的类不要作为局部变量出现在类中。

3.7 合成复用原则(Composite Reuse Principle)

  • 尽量首先使用合成/聚合的方式,而不是使用继承。



四、MVC模式

MVC模式可能是最早听过的模式了。但是为什么23种设计模式中没有MVC模式呢?

GoF把它当作一组用于构建用户界面的类集合。MVC模式其实是三个经典设计模式的演变——观察者模式、策略模式、组合模式。根据MVC在框架中的实现不同可能还会用到工厂模式和装饰器模式。

MVC被称为软件系统的架构模式更为合适



五、 UML类图

5.1 关系

关系形状场景
依赖带普通箭头的虚线,指向被依赖者方法调用、方法的参数或返回值
关联带普通箭头的实线,指向被关联者。可以双向关联一般关系
聚合一端空心菱形箭头一端普通箭头的实线,菱形指向整体,普通箭头指向组件成员变量
组合一端实心菱形箭头一端普通箭头的实线,菱形指向整体,普通箭头指向局部生命周期一致的整体和局部
泛化带空心三角箭头的实线,指向基类继承
实现带空心三角箭头的虚线,指向接口实现接口

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值