设计模式 概述、创建者模式

1. UML 图

  • 定义与类型:统一建模语言(UML)用于软件可视化设计,具有简单、统一、图形化等特点,包含用例图、类图等 9 种图。
  • 类图表示法
    • 类的表示:在 UML 类图中,类用包含类名、属性和方法且带分割线的矩形表示,属性和方法前的符号表示可见性(+ 表示 public- 表示 private# 表示 protected)。
    • 类间关系
      • 关联关系:对象间的引用关系,分为单向关联(带箭头实线)、双向关联(不带箭头直线)和自关联(带箭头指向自身的线)。
      • 聚合关系:整体和部分的强关联关系,部分可脱离整体独立存在,用带空心菱形的实线表示。
      • 组合关系:更强烈的整体与部分关系,整体控制部分生命周期,部分不能脱离整体,用带实心菱形的实线表示。
      • 依赖关系:对象间耦合度最弱的使用关系,通过局部变量、方法参数或静态方法调用体现,用带箭头的虚线表示。
      • 继承关系:体现一般与特殊的关系,即父类与子类关系,用带空心三角箭头的实线表示。
      • 实现关系:接口与实现类之间的关系,类实现接口中声明的抽象操作,用带空心三角箭头的虚线表示。

2. 软件设计原则

  • 开闭原则:对扩展开放,对修改关闭,借助接口和抽象类实现热插拔效果。
  • 里氏代换原则:子类对象能替换父类对象且程序行为不变。
  • 依赖倒转原则:高层和低层模块都依赖抽象,抽象不依赖细节。
  • 接口隔离原则:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
  • 合成复用原则:尽量先使用组合或聚合等关联关系实现复用,其次考虑继承关系。继承复用存在破坏封装性、耦合度高、灵活性低等缺点,而组合或聚合复用能维持封装性、降低耦合度、提高复用灵活性。

3. 创建型设计模式

3.1 单例设计模式
  • 结构:包含单例类(只能创建一个实例的类)和访问类(使用单例类)。
  • 实现方式
    • 饿汉式:类加载就会创建单实例对象,包括静态变量方式和静态代码块方式。
    • 懒汉式:类加载不会创建单实例对象,首次使用时才创建,包括线程不安全方式、线程安全方式和双重检查锁方式。
  • 存在问题及解决:序列化和反射会破坏单例模式,可在单例类中添加 readResolve() 方法解决序列化问题;枚举方式可避免这两个问题。
3.2 工厂模式
  • 简单工厂模式
    • 结构:包含抽象产品、具体产品和具体工厂。
    • 实现:通过工厂类创建产品对象,可将创建对象的功能定义为静态的(静态工厂模式)。
    • 优缺点:优点是封装对象创建过程,降低客户代码修改可能性;缺点是增加新产品需修改工厂类代码,违背开闭原则。
    • 模式扩展:简单工厂结合配置文件可解除工厂对象和产品对象的耦合。
  • 工厂方法模式
    • 结构:包括抽象工厂、具体工厂、抽象产品和具体产品。
    • 实现:定义抽象工厂接口,具体工厂实现接口创建具体产品,解决了简单工厂模式的缺点,遵循开闭原则。
    • 优缺点:优点是用户只需知道具体工厂名称即可获取产品,增加新产品只需添加具体产品类和对应工厂类;缺点是增加产品会增加系统复杂度。
  • 抽象工厂模式
    • 结构:包含抽象工厂、具体工厂、抽象产品和具体产品,考虑多等级产品的生产。
    • 优缺点:优点是能保证客户端始终使用同一个产品族中的对象;缺点是增加新产品时所有工厂类都需修改。
    • 使用场景:创建相互关联或依赖的产品族,系统中有多个产品族但每次只使用某一族产品,客户端不依赖产品实例创建细节和内部结构。
3.3 原型模式
  • 使用场景:对象创建复杂,对性能和安全要求较高。
  • 扩展(深克隆):浅克隆会导致引用类型属性共享,可使用对象流实现深克隆。
3.4 建造者模式
  • 概述:将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示,适用于对象构建过程复杂的情况。
  • 结构:包含抽象建造者类、具体建造者类、产品类和指挥者类。
  • 实例:以创建共享单车为例,展示了建造者模式的具体实现。
  • 模式扩展:通过链式调用的方式构建对象,提高代码可读性和开发效率。
3.5 创建者模式对比
  • 工厂方法模式:注重整体对象的创建方式。
  • 建造者模式:注重部件构建的过程,通过一步一步精确构造创建复杂对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值