5.2 面向可维护性的设计模式

1 创造模式
(1) 工厂方法模式
该模式定义用于创建对象的接口,但让子类决定实例化哪个类,即将类的实例化延迟到子类。
当我们无法预测需要创建哪个子类时,定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从 而使一个类的实例化延迟到其子类。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
优点:不需要将类绑定到客户端代码
缺点:需要工厂类
该方法遵循开闭原则

(2) 抽象工厂模式
抽象工厂模式:提供接口以创建一组相关/相互依赖的对象, 但不需要指明其具体实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述抽象工厂创建的不是一个完整的产品,而是一类产品,产品的创建流程都是一样的,但是具体的过程不一样。

▪ Factory方法仅用于创建一个产品,但用于创建相关或从属产品族的抽象Factory。▪ Factory方法模式向客户端公开用于创建对象的方法,而Abstract Factory则公开由这些Factory方法组成的一系列相关对象。在这里插入图片描述
▪ 抽象工厂模式使用组合将创建对象的责任委托给另一个类,而工厂方法模式使用继承并依赖派生类或子类来创建对象
在这里插入图片描述
2 结构模式
(1) Proxy 代理模式
▪ 目标:–防止对象直接被其客户端访问
–允许通过充当传递实体或占位符对象进行对象级访问控制。
▪ 解决方案:–使用称为代理的附加对象
–客户端仅通过代理访问受保护对象
–代理跟踪受保护对象的状态和/或位置

功能包括缓存信息(远程代理),代替(虚拟代理)以及访问控制(保护代理)
在这里插入图片描述

在这里插入图片描述
Proxy模式和Adapter模式对比:
前者是行为模式,使用包装类,目的是为真正的自由创建一个代理,必须提供相同的接口。
后者是结构模式,目的是为了解决接口不兼容

3 行为模式
(1) Observer
观察者模式:订阅服务器对发布服务器进行订阅,发布服务器发生更改的时候通知所有订阅服务器。
发布和订阅是独立的,各接口可以独立的变化。
定义四种对象
-抽象主题:维护依赖项列表;在主更改时通知它们(发布者)
-抽象观察者:定义更新依赖项的协议(订阅者)
-具体主题:管理依赖项的数据;当主更改时通知他们
-具体的观察者:接收更新消息时获取新的主题状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保持一致性的三种变体:
推送通知:每当对象的状态发生变化时,都会通知所有观察者发生变化:
推送更新通知:对象还将已更改的状态发送给观察者通知:观察员询问被调查者的状况▪ 也称为发布订阅。

优点:发布者和订阅者低耦合,能动态增删观察者;观察者如何行为与发布者无关
缺点:需要存储观察者列表

(2) Visitor
访问者模式:允许在运行时将一个或多个操作应用于一组对象,从而将操作与对象结构分离。
Visitor模式实际上所做的是创建一个外部类,该类使用其他类中的数据。–如果操作逻辑发生变化,那么我们只需要在visitor实现中进行更改,而不是在所有item类中进行更改。▪
在这里插入图片描述
▪ 迭代器:行为模式,用于顺序访问聚合而不公开其底层表示。所以可以在迭代器后面隐藏列表、数组或类似的聚合。 ▪ 参观者:行为模式,用于在不改变元素本身实现的情况下,对元素的结构执行操作。
策略模式vs访问者模式
▪ 二者都是通过delegation建立两个对象的动态联系
– Visitor强调是的外部定义某种对ADT的操作,该操作于ADT自身关系 不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client 通过它设定visitor操作并在外部调用。 – 而Strategy则强调是对ADT内部某些要实现的功能的相应算法的灵活替换。 这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类 而已。
▪ 区别:visitor是站在外部client的角度,灵活增加对ADT的各种不同操 作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度, 灵活变化对其内部功能的不同配置。

4设计模式的共性与差异
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值