软件构造 第五节

1 工厂方法模式

当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指 明要具体创建的实例时,用工厂方法。 定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从 而使一个类的实例化延迟到其子类。

常规情况下,client直接创建具体对象

//
 Product p = new ProductOne();

在工厂方法模式下:

 //
 Product p = new ConcreteCreatorOne().factoryMethod();

例子:
在这里插入图片描述

2 抽象工厂模式

抽象工厂模式:提供接口以创建一组相关/相互依赖的对象, 但不需要指明其具体实现类。

工厂模式和抽象工厂模式的区别:
创建一个对象 vs 创建多个类型的对象
一个factory方法 vs 多个factory方法
例子:
在这里插入图片描述

3 代理模式

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

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

代理模式和适应模式的区别:

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

适应模式:目的消 除不兼容,目的是B以客户端期望的统一的方式与A建立起联系

4 观察者模式

  • 一种“发布-订阅”形式,发布方的变化,会通知订阅方
  • 订阅方在发布方注册
  • 通过接口分离两者
    在这里插入图片描述

5 访问者模式

在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活 扩展/改变visitor的操作算法,而不影响ADT。
在这里插入图片描述

6 共性样式

适应模式:适用场合你已经有了一个类, 但其方法与目前client的需求不 一致。 根据OCP原则,不能改这个类, 所以扩展一个adaptor和一个统一接口。

代理模式:适用场合你已经有了一个类, 但其方法与目前client的需求不 一致。 根据OCP原则,不能改这个类, 所以扩展一个adaptor和一个统一接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值