软件工程-设计模式
软件工程-面向对象开发更多请参考https://blog.csdn.net/qq_22172133/article/details/81430464
策略模式
定义一系列算法,将之封装起来,并且使它们可以互相替换。该模式使得算法可独立与客户而变化。
- 策略是一个接口,该接口定义了若干个抽象方法
- 具体策略:是实现策略接口的类,实现了策略接口所定义的抽象方法,即具体算法
- 适用情景:
- 一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,使用策略模式可以避免在类中使用大量的条件语句。
- 程序的主要类不希望暴露复杂的、与算法相关的数据结构。
- 需要使用一个算法的不同变体。
访问者模式
作用于某对象结构中的各个元素的操作,它使得用户可以在不改变各个元素的类的前提下定义作用于这些元素的新操作。
- 抽象元素:一个抽象类,该类定义了接收访问者的操作
- 具体元素:element的子类
- 抽象访问者:一个接口,该接口定义操作具体元素的方法
- 具体访问者:实现抽象访问者接口的类
- 适用情景:
- 在一个多对象的集合结构中,相对集合中的对象增加一些新操作。
- 需要对集合中的对象进行很多不同的并且不相关的操作,而我们又不想修改对象的类,此时使用访问者模式,在抽象访问者接口类中定义一些不同的对象操作。
装饰模式
动态地给对象增加一些额外的职责。功能上装饰模式比生成子类更灵活。
- 抽象组件:相当于抽象类,定义了需要进行装饰的方法。
- 具体组件:抽象组件的一个子类。
- 装饰:抽象组件的一个子类,作为“装饰者”的角色,去装饰具体组件(作为“被装饰者”),所以装饰者需要包含被装饰者的引用,装饰者可以是抽象类也可以是非抽象类。
- 具体装饰:装饰角色的一个非抽象子类。
- 适用情景:
- 程序希望动态地增强类的某个对象的功能,而又不影响该类的其他对象。
- 采用继承来增强对象功能不利于系统的扩展和维护。
适配器模式
将一个类的接口转化为客户希望的另外一个接口,它使得原本由于接口不兼容而不能一起工作的那些类能够一起工作。
- 目标:目标是一个客户想使用的接口。
- 被适配者:原本已经存在的接口或抽象类,被适配者需要适配。
- 适配器:该类实现了目标接口,并包含有被适配者的引用,对被适配者与目标接口进行适配。
- 适用情景:如描述
工厂化模式
定义一个用于创建对象的接口,让子类决定实例化那一个类,即它使一个类的实例化延迟到其子类。
- 抽象产品:抽象类或接口,定义产品实现的方法。
- 具体产品:如果抽象产品是抽象类,则具体产品是它的子类;如果抽象产品是接口,则具体产品是实现该接口的类。
- 构造者:一个接口或抽象类,构造者负责定义一个被称为工厂方法的抽象方法,该方法返回具体产品类的实例。
- 具体构造者:如果构造者是抽象类,则具体构造者是子类;如果构造者是接口,则具体构造者是实现该接口的类。具体构造者重写工厂方法,使该方法返回具体产品的实例。
- 适用情景:
- 用户需要一个类的子类的实例,但不希望该类的子类形成耦合
- 用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。
- 工厂方法使用户不必知道它所使用的对象是如何被创建的,只需知道该对象有哪些方法即可。