面向对象的23种设计模式

什么是设计模式

每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。

八大设计原则

(1)依赖倒置原则

  • 高层模块不应该依赖于底层模块,二者都应该依赖于抽象
  • 抽象不应该依赖于实现细节,实现细节不应该依赖抽象

(2)开放封闭原则

  • 对扩展开放,对更改封闭
  • 类模块应该是可扩展的,但是不可修改

(3)单一职责原则

  • 一个类应该仅有一个引起它变化的原因
  • 变化的方向隐含着类的责任

(4)替换原则

  • 子类必须能够替换它们的基类
  • 继承表达类型抽象

(5)接口隔离原则

  • 不应该强迫客户程序依赖它们不用的方法
  • 接口应该小而完备

(6)优先使用对象组合

  • 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”
  • 继承在某种程度上破坏了封装性,子类父类耦合度高

(7)封装变化点

  • 使用封装来创建对象之间的分阶层,让设计值可以在分界一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合

(8)针对接口编程

  • 不将变量类型声明为某个特定的具体类,而是声明为某个接口
  • 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口

23种设计模式

组件协作

  现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。
模板模式(Template Method)
策略模式(Observer)
观察者模式(Strategy)

单一职责

  在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。
装饰模式(Decorator)
桥模式(Bridge)

对象创建

  通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。
工厂模式(Factory Method)
抽象工厂模式(Abstract Factory)
原型模式(Prototype)
构建器(Builder)

对象性能

  面向对象很好地解决了“抽象” 的问题,但是必不可免地要付出一定的代价。 对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。
单件模式(Singleton)
享元模式(Flyweight)

接口隔离

  在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。
门面模式(Facade)
代理模式(Proxy)
适配器(Adapter)
中介者(Mediator)

状态变化

  在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。
状态模式(State)
备忘录(Memento)

数据结构

  常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口 , 来实现与特定数据结构无关的访问,是一种行之有效的解决方案。
组合模式(Composite)
迭代器(Iterator)
职责链(Chain of Resposibility)

行为变化

  在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。”行为变化” 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。
命令模式(Command)
访问器(Visitor)

领域问题

解析器(Interpreter)

以上内容来源于李建忠老师的c++设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值