向对象设计之设计模式(创建型篇)

面向对象设计之设计模式(创建型篇)

把对象实例化过程进行抽象,通过采用抽象类所定义的接口,封装了系统中对象如何创建、组合等信息

在这里插入图片描述

抽象工程模式(Abstract Factory)

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要(或关心)实际产出的具体产品是什么。这样客户就从具体的产品中被解耦

在这里插入图片描述

优点

  • 分离了具体类
  • 更容易在产品系列中进行转换
  • 提高产品间的一致性

缺点

  • 难以支持新的产品登记结构,支持新的产品登记结构就要扩展抽象工厂接口

适用场景

  • 系统独立于产品的创建、组成以及表示
  • 系统配置成多个产品的系列
  • 当要强调一系列相关的产品对象的设计以便于进行联合使用时
  • 当提供一个产品类库,而只想显示它们的接口而不是实现时

生成器模式(Builder)

封装一个产品的构造过程,并允许按步骤构造

在这里插入图片描述

优点

  • 产品的内部表示可以独立地变化
  • 将构造代码与表示代码相分离,客户端不必知道产品内部组成的细节

缺点

  • 生成器模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合
  • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大

适用场景

  • 穿件复杂对象的算法独立与组成对象的部分
  • 构造过程必须允许一构造对象有不同表示

工厂方法模式(Factory Method)

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个

工厂方法让类把实例化推迟到子类

在这里插入图片描述

优点

  • 无需将应用程序绑定到代码中,代码之处理接口,可以使用任何实现了接口的类
  • 允许子类提供对象的扩展版本
  • 符合迪米特法则、依赖倒置原则、里氏替换原则

缺点

  • 需要 Creator 和相应的子类作为工厂方法的载体,如果应用确实需要 Creator 和子类存在,则很好,否则,需要增加一个类层次

适用场景

  • 当一个类不知道它所创建的产品的具体是哪个子类时
  • 当创建的对象的过程希望延缓到子类中进行时
  • 类希望子类指定它要创建的对象

原型模式(Prototype)

指定创建对象的种类,并且通过拷贝这些原型创建新的对象。以一个已有的对象作为原型,通过它来创建新的对象

当创建给定类的实例的过程很昂贵或很复杂时,使用原型就很合适

在这里插入图片描述

优点

  • 可以在运行时添加或删除产品
  • 原型模式提供简化的创建结构

缺点

  • 每一个类必须配备一个克隆方法

适用场景

  • 在运行时,指定需要实例化的类
  • 米面构建与产品的类层次结构相似的工厂类层次结构
  • 当类的实例是仅有的一些不同状态组合

单例模式(Singleton)

确保一个类只有一个实例,并提供一个全局访问点

在这里插入图片描述

优点

  • 对单个实例的受控访问
  • 名称空间减少
  • 允许改进操作和表示
  • 允许可变树木的实例
  • 比类操作更灵活

缺点

  • 单例类的扩展有很大的困难,且职责过重,在一定程度上违背了“单一职责原则”

适用场景

  • 只有一个类实例
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GettingReal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值