首页 > 代码库 > 设计模式笔记
设计模式笔记
一、策略模式
策略模式可以说是一种相当常用的模式,其主要思路是:面向接口设计,尽可能保证方法的可扩展性。
派生类的同时,派生正确的方法,而不是重写已有的方法——可能导致已有实现的改变,这是我们不想看到的。
若类A中有一个方法fa(),而该方法fa()可能有多种实现,这些实现有些已知,而有些可能还要后续进行扩展,那么策略模式就是:将该方法fa()进行封装,得到接口类FA,然后再对FA进行派生,得到所需的类:FA_a、FA_b……,而这些类中是方法fa的已知的实现fa_a、fa_b……,这样在类A中包含一个接口类FA的实例后,对类A进行实例化时,可以动态选择方法fa()的实现。
要点包括:
将对象的方法进行分类(按照可变/不变的属性),将不变的独立出来,作为基类中的方法;可变的方法抽象为接口,通过在基类中创建该方法的实例来对该方法进行调用,然后在基类的继承时,选择不同的接口来实现该方法多样性的同时,可以达到尽可能复用的目的。
注意:
可变与不变不是固定的,需要按照当时需求认真分析,面对多变的需求要尽量多使用接口抽象,面对固定需求可以适当将实现放在基类。
基类也有可能需要使用接口,当基类本身也具有多变性时,可以尝试将基类也设计成为接口。
二、观察者模式
观察者模式定义了一种对象之间的“一对多”的以来关系,这种关系是松耦合的,当一个对象的状态改变时,所有依赖于该对象的对象都会收到该状态改变的通知。(“发布者”与“订阅者”的关系。)
要点:
首先,对于发布者来说,发布者需要包含一个订阅了该发布者的所有订阅者的列表,并包含一个可以让订阅者订阅和解除订阅该对象的方法,最重要的还要有一个通知状态改变的方法。
其次,对于订阅者来说,发布者状态改变时,订阅者可以对于该变化有一个特有的动作(即方法)。
使用:
在实现订阅者和发布者的接口后,若需要使用该模式,可分别对发布者和订阅者进行继承。
设计模式笔记