软件构造期末复习5.2面向可维护性的设计模式

软件构造期末复习 5.2面向可维护性的设计模式

factory method:

当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法;
定义一个用于创建对象的接口,让其他子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类;
每一个工厂只用来创建某一种类型下的一个或多个产品;

abstract factory(抽象工厂):

一个UI,包含多个窗口控件,这些控件在不同的OS中实现不同;
一个仓库类,要控制多个设备,这些设备的制造商各有不同,控制接口有差异;
抽象工厂模式:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类;
抽象工厂创建的不是一个完整的产品,而是“产品族”(遵循固定搭配规则的多类产品的实例),得到的结果是:多个不同产品的object,各产品创建过程对client可见,但“搭配”不能改变。

proxy(代理模式):

某个对象比较“敏感”/“私密”/“贵重”,不希望被client直接访问到,故设置proxy,在二者之间建立防火墙

proxy VS adaptor:

adapor(适配器):
目的:消除不兼容,目的是B以客户端期望的统一的方式与A建立联系

proxy
目的:隔离对复杂对象的访问,降低难度/代价,定位在“访问/使用行为”

observer:

“粉丝”对“偶像”感兴趣,希望随时得知偶像的一举一动;
粉丝回到偶像那里注册,偶像一旦有新闻发生,就推送给已注册的粉丝(回调callback粉丝的特定功能)

visitor:

对特定类型的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类;
本质上:将数据和作用于数据上的某种/些特定操作分离开

visitor VS iterator:

iterator(迭代器):以遍历的方式访问集合数据而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。
visitor:在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT

strategy VS visitor

相同:二者都是通过delegation建立两个对象的动态联系
不同:

  • visitor强调外部定义对ADT的某种操作,该操作于ADT自身关系不大(只是访问ADT),故ADT内部只需要开发accept(visitor)即可,client通过它设定visitor操作并在外部调用。
  • strategy强调对ADT内部某些实现的功能的相应算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过delegate到外部strategy类而已
  • visitor是站在外部client的角度,灵活增加了对ADT各种不同操作(哪怕ADT没有实现该操作)
  • strategy是站在内部ADT的角度,灵活变化对其内部功能的不同配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值