2020.04.29软件构造听课笔记

工厂方法模式:
工厂方法模式也被称为“虚拟构造器”
当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指明需要具体创建的实例时,有工厂方法
定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类

静态工厂方法相比于通过构造器(new)构建对象:
1.静态工厂方法可具有指定的名称
2.不必在每次调用的时候都创建新对象
3.可以返回原返回类型的任意子类型

每增加一种产品就需要增加一个新的工厂子类

抽象工厂模式:
例子1:一个UI,包含对个窗口控件,这些控件的组合在不同的OS中实现不同
例子2:一个智能房屋的设备管理系统,要控制多个设备,这些设备的制造商各有不同,控制接口有差异
抽象工厂模式:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体实现类

通过一个可调用其他多个工厂的工厂

抽象工厂创建的不是一个完整的产品,而是“产品族”(遵循固定搭配规则的多类产品的实例),得到的
结果是:多个不同产品object,各产品创建过程对client可见,但“搭配”不能改变

本质上,抽象工厂是把多类产品的factory method组合在一起

抽象工厂方法使用组合/委派    工厂方法使用继承/子类型


代理模式:
目的:某个对象比较“敏感”/“私密”/“贵重”,不希望被client直接访问,故设置proxy(代理),在二者之间建立防火墙

远程代理:为一个对象在不同的地址空间提供局部代表(缓存机制)
虚代理:根据需要创建开销很大的对象(延迟加载,延迟创建)
保护代理:提供访问保护

proxy(代理) vs adaptor(适配器)
adaptor目的:消除不兼容,目的是B以客户端期望的统一的方式与A建立联系
proxy目的:隔离对复杂对象的访问,降低难度/代价,定位在“访问/使用行为”


Observer(观察者模式):
一种“发布-订阅”形式,发布方的变化,会通知订阅方
订阅方在发布方注册
通过接口分离两者

优点:
主体(被观察者)和观察者之间是松耦合,主体不需要关注观察者
动态的增加和删除观察者
观察者的行为不受主体的控制

实现注意:
主体需要存储观察者列表
可通过在update()中增加参数来观察对个主体
触发机制


Visitor(访问者模式):
对特定的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类
本质上:将数据和作用于数据上的某种/某些特定操作分离开来
为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下载需要时通过delegation接入ADT


Visitor(访问者)vs 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、付费专栏及课程。

余额充值