设计模式随记

在一个考题中涉及的几个设计模式,思路整理,随记备忘。

1. 外观模式

适用两个子系统之间的接口如何封装时的一个原则

使用场景:如果两个子系统之间有交互,增加一个Facade类,在Facade类中提供子系统之间相互调用的接口。

在Facade类提供的接口内部,描述具体的处理步骤。通过这种方式对外部子系统隐藏某个处理的实现细节。

比如子系统1依赖子系统2完成写入数据的功能。假定子系统2在完成写入数据的功能时包含了以下4个步骤:

1)建立连接  2)数据格式转换  3)写入数据  4)释放连接

为实现上述功能,子系统2对外提供接口时有两种方案:

方案1):

针对每个步骤对外分别提供一个方法。

方案2):

From 步骤1 To 步骤4,是子系统2的内部处理逻辑,不应该暴露给子系统1。子系统2定义一个Facade类,在Facade类

中提供1个写入数据的方法,封装了步骤1-步骤4的处理。

 

2.装饰模式

当需要扩展已有类对外提供的能力时可以考虑的一种方案。

方案一)

继承思路:新创建一个继承于已有类的新类,在新建的类中增加相应的方法。

方案二)

组合思路:新创建一个类,在新类中包含一个已有类的成员,通过该成员复用已有类的能力。

装饰模式对应的就是上述方案二。

 

3.享元模式

需要创建很多相似的只读实例时,可以考虑使用享元模式减少实例的数量,提升性能。

基本思路:建立一个实例pool,创建实例时,如果pool中存在则直接使用pool中的实例,不存在则创建新实例。

使用单纯享元模式时的两个要点:

1)将对象的状态分为内部状态和外部状态,内部状态在创建实例时指定,外部状态由客户端传递参数并通过对应方法指定。

     比如:一个文档中多次出现的相同图片,图片内容(内部状态)都是一样的,在文档中的位置(外部状态)不一样

2)在创建享元实例的工厂类中,一般定义一个map作为pool。创建实例时根据内部状态查找,如果已存在则不再新建实例。

 

组合享元模式:=====????没太看明白

 

4.桥接模式

定义类的结构时需要考虑的一个原则。

定义类时,一般会包含对象的属性以及具备的行为。

如果对象的属性或具备的行为比较复杂,可以考虑为属性和行为分别定义不同的类,然后通过组合的方式将两个类桥接起来。

比如:有一个消息对象,有重要消息、紧急消息,同时消息可以通过短信发送或邮件发送。

运用桥接模式,将消息发送行为定义为独立的类(短信发送类、Email发送类)。在消息类中,包含一个发送类。

并在构造消息类的对象时,将发送类对象作为参数传入。

通过桥接方式,保证了类的扩展性。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值