面向可维护性的设计模式

Creational patterns (关于如何创建类的新实例的模式)

工厂方法模式(Virtual Constructor)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。
当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
在这里插入图片描述
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来创建产品。
具体工厂(Concrete Factory):主要是实现抽象工厂方法中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
优点:无需将特定应用程序的类绑定到代码
缺点:客户可能需要创建Creator的子类,以便他们可以创建特定的ConcreteProduct

抽象工厂模式

提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类。
在这里插入图片描述

结构模式(Structural patterns)

代理模式

  1. 信息缓存(“Remote Proxy”)
    代理对象是不同地址空间的一个本地代表
    如果信息改变不是特别频繁会使用
  2. Standin替换着(“Virtual Proxy”)
    Object由于太贵或者创造的代价昂贵无法下载
    如果真正的对象无法通过途径去访问
  3. 存取控制(“Protection Proxy”)
    代理对象对于真正的Object提供保护
    在这里插入图片描述
    Proxy和Adapter之间的对比
    Adapter:目的为消除不兼容,目的是B以客户端期望的统一的方式与A建立起联系。
    Proxy:目的是隔离对复杂对象的访问,降低难度/代价,定位在“访问/使用行为”

行为模式

Observer

保证了从属状态和主状态必须一致,“粉丝”对“偶像”感兴趣,希望随时得知偶像的一举一动。粉丝到偶像那里注册,偶像一旦有新闻发生,就推送给已注册的粉丝。

vistor

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

关于Strategy和visitor
而后则都是delegation建立两个对象的动态联系:
但是visitor强调的是外部定义某种对ADT的操作,该操作与ADT自身关系不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client通过它设定visitor操作并在外部调用。
而strategy则强调是对ADT内部某些要实现的功能的相应的算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类而已。
visitor是站在外部client的角度,灵活增加对ADT的各种不同操作,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值