我们一起来读书吧 关注:154贴子:2,743
  • 0回复贴,共1

设计模式-可复用面向对象软件的基础5.9-5.11

只看楼主收藏回复

5.9 STRATEGY(策略)一对象行为型模式
意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
优点:使得算法可独立于使用它的客户而变化。
应用场景:
适用于算法在运行时动态选择的情况,以及算法需要封装、切换或维护的场景。例如,在一个电商系统中,可以用来实现不同的支付算法(如支付宝支付、微信支付、信用卡支付等),每种支付方式可以作为一个策略类。
5.10 TEMPLATE METHOD(模板方法)一类行为型模式
意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
优点:使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
应用场景:
1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。·控制子类扩展。
3. 模板方法只在特定点调用“hook”操作(参见效果一节),这样就只允许在这些点进行扩展。
5.11VIST0R(访问者)一对象行为型模式
意图:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
优点:
1. 访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂的结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此变得很容易。
2. 访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。
3. 访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。迭代只能访问属于同一个类型等级结构的成员对象,而不能访问属于不同等级结构的对象。访问者模式可以做到这一点。
4. 积累状态。每一个单独的访问者对象都集中了相关的行为,从而也就可以在访问的过程中将执行操作的状态积累在自己内部,而不是分散到很多的节点对象中。这是有益于系统维护的优点。
缺点:
1. 增加新的节点类变得很困难。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。
2. 破坏封装。访问者模式要求访问者对象访问并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问就变得没有意义。由于访问者对象自己会积累访问操作所需的状态,从而使这些状态不再存储在节点对象中,这也是破坏封装的。
应用场景:
1. 数据结构复杂且需要多种不同操作
当我们面对一个复杂的数据结构,如树结构或图结构,并且需要对其进行多种不同类型的操作时,访问者模式可以很好地发挥作用。它允许我们将各种操作定义为独立的访问者,而无需修改数据结构本身,保持了数据结构的稳定性。例如,在一个文件系统中,有文件和文件夹等不同类型的节点,我们可能需要进行文件读取、写入、复制、移动等多种操作。使用访问者模式,我们可以为每个操作创建一个访问者,方便地对文件系统进行各种处理。
2. 数据处理与分析
在数据分析和处理的场景中,访问者模式可以帮助我们对数据进行灵活的操作和转换。我们可以定义不同的访问者来执行数据统计、筛选、格式化等任务,而不需要直接修改原始数据结构。比如,在一个大型数据集上,我们需要根据不同的条件进行数据筛选和统计,使用访问者模式可以将这些操作封装在不同的访问者中,方便地对数据进行处理。
3. 图形界面交互
在图形界面开发中,访问者模式可以用于处理不同类型控件的交互操作。例如,一个界面上有按钮、文本框、下拉菜单等多种控件,我们可以为每个控件创建相应的访问者,实现对控件行为的定制和操作。这样,当需要添加新的控件或修改控件的行为时,只需要添加或修改相应的访问者,而不需要对整个界面的代码进行大规模修改。
4. 业务规则的灵活应用
有些业务场景中存在多种复杂的规则和逻辑,这些规则可能会随着业务的发展而不断变化。访问者模式可以帮助我们将这些规则抽象为独立的访问者,以便在不同的情况下灵活应用和调整。例如,在一个电商系统中,订单可能有不同的状态和处理规则,我们可以使用访问者模式来定义不同的规则访问者,根据订单的状态执行相应的操作。
5. 代码维护和扩展
当项目逐渐发展壮大,需要对现有功能进行扩展或修改时,访问者模式可以提供一种相对清晰和灵活的方式来进行代码维护。通过添加新的访问者,我们可以在不影响原有代码结构的情况下实现新的功能或修改已有功能。同时,访问者模式也有助于提高代码的可读性和可维护性,使得不同模块之间的职责更加明确。
6. 数据转换和映射
在数据处理流程中,经常需要将一种数据结构转换为另一种数据结构,或者对数据进行特定的映射操作。访问者模式可以方便地实现这些转换和映射,而不需要在转换过程中对原始数据进行大量的修改。例如,将一种数据格式转换为另一种格式,或者将数据中的某些字段进行提取和重组等。


IP属地:北京1楼2024-11-15 15:09回复