设计模式总结

设计模式总结

本学期软件构造围绕着ADT进行编程,而编写过程中我们要对程序的正确性,健壮性,可复用性等进行权衡,使其能最大限度地满足用户需求。而这个过程中我们就会用到多种多样的设计模式,它们能帮助我们来提高用户体验以及对程序的不同性能提供不同程度的帮助。

  1. Adapter Pattern(适配器模式)
    作用:将某个类/接口转换为client期望的其他形式。
    解决类之间接口不兼容的问题。
    通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
    两种类型:
    继承:
    在这里插入图片描述
    委托:
    在这里插入图片描述
    总结:该模式就是在已经有一个类跟用户需求差不多的情况下,我们就建立一个适配器,然后利用那个类中的方法并进行以下改进,从而达到用户需求,也算是一种复用吧。

2.Decorator Pattern(装饰器模式)
作用:
当很多子类有很多特性的时候,特性的排列组合将会特别多,那么就会产生组合爆炸,如果按常规编程,就会有大量的代码重复。
而装饰器模式就是为了减少这种代码重复而设立。
它为对象增加不同侧面的特性,对每个特性构造子类,并通过委派机制增加到对象上。从而以递归的方式,将对象一层层装饰好。
在这里插入图片描述
总结:
装饰器模式就像是在给对象穿衣服,每穿一件衣服,这个对象就多一个特性,但是这个对象有不知道他会穿什么衣服,所以最后调用的时候,就要用委托的机制来调用每层衣服中特有的方法。

3.Façade Pattern(外观模式)
作用:
客户端需要通过一个简化的接口来访问复杂系统内的功能。
Façade模式就是提供了一个统一的接口来取代一系列小的接口,相当于复杂系统做了一个封装,简化客户端使用。便于客户端学习,解耦。
在这里插入图片描述
总结:
相当于封装,之后要是用这个系统只要建立一个façade然后用其中的各种方法,就能实现该系统的各种功能。

4.Strategy Pattern(策略模式)
作用:
对于同一个任务,可能有很多不同的方法来实现,client在不同情况可能用不同方法来解决问题。
策略模式就为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
在这里插入图片描述
总结:
相当于为各种方法建立一个接口,然后你要用哪种方法直接在这个接口中选择就好,不用具体知道各方法的函数。

5.Template Method模板模式
作用:
对于某一项任务,可能有相同的的步骤,但是每一步的具体方法可能不同。
模板模式就把共性的步骤放在抽象类中公共实现,差异化的步骤就在各子类中分别实现。(继承和重写)
在这里插入图片描述
总结:
就相当于是流水线上每一步不一定只有一种方法,而我们要做的就是把相同的在抽象类中实现,不同的在子类分别实现。到时候还是直接调用抽象类,然后选择不同的流水线就好了。

6.Iterator(迭代器模式)
作用:
不管容器/集合中是什么,我都可以用着一种方式遍历,不用考虑内部存储了什么ADT
在这里插入图片描述

7.Factory Method(工厂方法) 用于创造新实例
作用:当client不知道/不确定要创建哪个具体类的时候,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪个类,从而是一个类的实例化延迟到其子类。
在这里插入图片描述
总结:
用工厂方法的时候,可以动态选择自己想要的任意子类型,并且不必在每次调用的时候都创建新对象。并且还利于扩展,每增加一种新的产品,就加一个新的工厂方法即可。

8.Abstract Factory(抽象工厂方法)
作用:
当一个应用有着多种控件,而每种控件有各自包含多种类型,那么这些空间的组合就可以用抽象工厂模式来提供接口创建一组相关/相互依赖的对象,而不需要指明其具体实现类。
在这里插入图片描述
总结:
抽象工厂创建的不是一个完整产品,而是产品族,得到了多个不同产品的object,各产品创建过程对client可见,但搭配不能改变。
本质上Abstract Factory是把多类产品的factory method组合在一起。
从而获得了多种不同的组合。
9.Proxy(代理模式)
作用:
某个对象比较“敏感”/“私密”/“贵重”,不希望被client直接访问到,故设置proxy,在二者之间建立防火墙。
在这里插入图片描述
总结:
通过代理模式,用户不能直接访问到想访问的对象,而是定位到了代理,从而降低了成本并保护了对象,提高其安全性。

10.Observer(观察者模式)
作用:
一种“发布-订阅”的形式,发布方的变化,会通知订阅方。
就好像粉丝和偶像,偶像一有什么动向就发布给已注册的粉丝。、
在这里插入图片描述
总结:
被观察者和观察者之间松耦合,主体不需要关注观察者
动态的增加和删除观察者
观察者的行为不受主体的控制
主体需要存储观察者列表
可通过在update()中增加参数来观察多个主体

11.Visitor (访问者模式)
作用:
将数据和作用于数据上的某种/某些特定操作分离开来。
为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下在需要时通过delegation接入ADT。
在这里插入图片描述
总结:
通过Visitor,我们可以在不修改ADT的情况下,对其进行扩展,提高灵活性并且不影响ADT。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值