软考中级-设计模式

本文详细介绍了23种设计模式,包括创建型(如简单工厂、工厂方法、抽象工厂、生成器、原型和单例模式)、结构型(适配器、桥接、组合、装饰器、外观、享元和代理模式)和行为型(解释器、模板方法、责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略和访问者模式)。设计模式提供了标准化的解决方案,以应对软件设计中常见的问题,提高代码的可读性和可维护性。

1 创建型设计模式

抽象了实例化过程,类创建型模式使用继承改变被实例化的类,对象创建型模式将实例化委托给另一个对象。创建型模式将系统具体使用哪些类信息封装起来,隐藏了这些类是如何被创建和组合的,只知道抽象类所定义的接口。

1.1 简单工厂模式

不属于23种设计模式,它定义了一个工厂,根据参数的不同返回不同类的实例,这些实例通常拥有共同的父类。

用于创建实例的方法通常为static方法,故简单工厂模式又称为静态工厂方法。

三类角色:

工厂:负责实现创建所有产品的方法,可直接被外部调用。

抽象产品:所有产品的父类,声明了公共方法

具体产品:被创建实例的类,实现了抽象产品中的方法。

缺点:不遵循开闭原则

1.2 工厂方法模式(创建型类模式,其余创建型模式均为创建型对象模式)

意图:定义一个用于创建对象的接口,将具体实例化哪个实例延迟到其子类来决定。

结构:四类角色

抽象产品:声明产品的接口。

具体产品:实现产品的接口。

抽象工厂:声明工厂创建产品的接口。

具体工厂:实现产品创建接口,返回具体的产品实例。

适用性:

  • 当一个类不知道他所必须创建的对象的类的类型的时候。

  • 当一个类希望由他的子类决定创建的实例的类型的时候。

  • 当类将创建对象的职责委托给多个帮助子类种的某个时,并且你希望其中哪个子类是代理者的时候。

1.3 抽象工厂模式

意图:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们的类。

结构:

抽象产品:声明产品的接口,其中包含了该产品的一条产品线。

具体产品:产品线中具体的各产品类,实现产品的接口。

抽象工厂:声明工厂创建产品的接口。

具体工厂:实现一类产品的创建接口,返回具体的产品实例。

适用性:

  • 一个系统要由多个产品系列中的一个来配置时。

  • 当一个系统应该独立于他的产品的创建、构成和表示时。

与工厂方法模式的区分:一个具体工厂可创建多个产品则为抽象工厂。

1.4 生成器模式

意图:将一个复杂对象的构建与其表示分离,使得一种构建可以产生多种不同的表示。

结构:

Builder:声明构建产品的抽象接口。

ConcreteBuilder:实现产品的构建(创建该产品的内部表示,包括该产品由那些类组成)和装配(由哪些接口来将前述这些类组装成产品)的接口,并实现获取产品的接口。

Director:创建使用builder接口的对象。

适用性:

  • 当创建复杂产品的算法应该独立与该对象的组成部分及装配部分时。

  • 当构造过程必须允许构造对象有多个不同的表示时。

1.5 原型模式

意图:用原型实例指定创建对象的种类,并通过复制这些原型创建新对象。

结构:

Prototype:抽象原型,提供克隆接口。

concretePrototype:具体原型,实现具体的克隆方法。

client:调用原型的克隆。

适用性:

  • 一个系统要独立于它产品的创建、构成和表示时。

  • 当实例化的类是在运行时指定,如动态装载。

  • 为了避免创建一个与产品类层次平行的工厂类时。

  • 当一个类的实例只能有几个不同状态组合中的一种时,建立一个原型并在需要时克隆,可能比每次手动创建实例方便些。

1.6 单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

结构:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值