设计模式个人笔记

OOP七大原则:

  • 开闭原则:对扩展开房,对修改关闭。
  • 里氏替换原则:继承必须确保超类所拥有的的性质在子类中任然成立。
  • 依赖倒置原则:要面向接口编程,不要面向实现编程。
  • 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性。
  • 接口隔离原则:要为各个类建立专用接口,不要试图建立一个庞大的接口提供所有依赖它的类去调用。
  • 迪米特法则:只与你的直接朋友交谈,不跟“陌生人”说话。
  • 合成复用原则:软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

设计模式三大类

  • 创建型模式
    创建对象同时隐藏创建逻辑的方式
  • 结构型模式
    这些模式关注类和对象的组合
  • 行为型模式
    这些模式关注对象之间的通信

创建型模式

工厂模式(Factory )

简单工厂模式 (Simple Factory)✔

在这个模式下,有三个角色,抽象的产品,具体的产品和工厂,工厂对外,客户只需要到工厂提供相应的“订单”即刻提取相应的产品,对产品的实例化过程并不关心。
在这里插入图片描述
工厂可以根据参数返回对应的类,将实例化类的过程进行了抽象。

优点是实现了对象的创建和对象的使用的分离,最大的缺点是当产品过多,工厂的代码会变得非常复杂。不符合开闭原则。

工厂方法模式(Factory Method)✔

由父类工厂负责定义创建商品的接口,由对应的子工厂生产对应的商品,即是每个工厂只生产对应类的商品。比起简单工厂模式更加符合开闭原则。

在这里插入图片描述
工厂类不再生产,又其子类进行生产,克服了简单工厂模式的缺点。不过缺点是添加新产品的同时还需要提供对应的生产工厂类,增加了系统复杂度。

抽象工厂模式(Abstract Factory)✔

产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。

产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

在这里插入图片描述
抽象出创建工厂的方法,提供多种产品等级的创建接口。
在这里插入图片描述

建造者模式(Builder)

犹如创造一辆车,车的零件相当于对象的属性,在一些螺丝钉设置的先后顺序,用户不需要关心细节,只需要调用”建造者“,建造者返回一个建造完毕的对象。

在这里插入图片描述
在该模式中,引入了Director,隔离了客户端和生产过程,建造者内部由Director负责组装,返回对应的对象。

单例模型(Singleton)

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。

一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。
在这里插入图片描述
单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

原型模式(Prototype)✔

在一个对象的创建需要较大的系统开销,譬如大量或者高代价的数据库操作才被创建,我们可以先缓存该对象,在下一个请求的时候返回这个对象的克隆体,减少系统开销。

在这里插入图片描述

结构型模式

适配器模式(Adapter)

适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

da
在这里插入图片描述
在这里插入图片描述
配合代码食用更佳

桥接模式(Bridge)

桥接模式通常是为了抽象化和实例化进行解耦,将继承关系转换为关联关系,降低了类与类之间的耦合,减少了代码编写量。
(持续更新)
在这里插入图片描述
Abstraction:抽象类(桥接类)
RefinedAbstraction:扩充抽象类(继承抽象类)
Implementor:实现类接口
ConcreteImplementor:具体实现类

优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

装饰器模式(Decorator)

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

在这里插入图片描述
举例:孙悟空变蜜蜂,本身还是孙悟空,蜜蜂是装饰器,让孙悟空有了蜜蜂的功能。

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:多层装饰比较复杂。

外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

在这里插入图片描述
Facade:外观类(为子系统提供统一接口)
SystemX:子系统

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

代理模式(Proxy)

给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
在这里插入图片描述
Proxy:代理类
Subject:抽象类
RealSubject:具体类

通过代理来对具体类操作,这样做的好处有可以对具体类操作的过程进行一些限制(安全控制),或者是具体类开销比较大,可以在具体类执行前,通过开销小的代理类进行快速响应。

行为型模式

命令模式(Command)

是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

观察者模式(Observer)

中介模式(Mediator)


参考资料
Graphic Design Patterns:https://design-patterns.readthedocs.io/zh_CN/latest/

https://www.runoob.com/design-pattern

尚硅谷视频学习:https://www.bilibili.com/video/BV1G4411c7N4?p=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值