复合模式1:简单的复合模式

复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。

1. 面向接口编程

2. 适配器加入

3. 装饰器加入

4. 抽象工厂加入

5. 组合加入

6. 观察者加入

1. 面向接口编程

复合模式1:简单的复合模式

复合模式1:简单的复合模式

复合模式1:简单的复合模式

2. 适配器加入

当鸭子出现的附近,鹅也应该在附近,我们设计了一个鹅类

复合模式1:简单的复合模式

鹅其实是和鸭子差不多的,我们想在所有使用鸭子的地方使用鹅。

我们需要鹅适配器,将鹅转换为Quackable接口

复合模式1:简单的复合模式

所以呢,我们同样的可以像对待鸭子一样使用鹅了。

3. 装饰器模式

如果我们想要记录所有Quackable类叫的次数,我们创建一个装饰者,通过装饰鸭子,每次鸭子一叫就记录鸭子叫声的次数,记住因为用了适配器,所以也能装饰鹅。

复合模式1:简单的复合模式

所以我们可以用如下代码,简单更新一下,

复合模式1:简单的复合模式

4. 抽象工厂加入

为什么我们不将创建鸭子的程序集中在一个地方呢?

复合模式1:简单的复合模式

让我们创建鸭子工厂和鸭子适配器工程

复合模式1:简单的复合模式

5. 加入组合模式

如果我们呢,想管理一群鸭子,可以采用组合模式,我们设置一个接口,既可以表示鸭子组合也可以鸭子群体

复合模式1:简单的复合模式

复合模式1:简单的复合模式

6. 观察者加入

如果科学家想要观察个别鸭子的行为,我们需要加入观察者模式,其中每一个鸭子都是一个被观察者,然后科学家是观察者。

我们先定义一个被观察者接口

复合模式1:简单的复合模式

其实本来呢,每个鸭子类都应该实现Quackable接口,但是为了简化代码,但是此时我们定义另外一个类,让鸭子类去组合这个类,然后去通知科学家。

复合模式1:简单的复合模式

复合模式1:简单的复合模式

几乎快完成了,我们此时加入Observer的类实现

复合模式1:简单的复合模式

由此我们开始观察啦

复合模式1:简单的复合模式

问题1:这是复合模式?

不是的,这只是一堆模式携手合作,复合模式是指一堆模式组合起来以解决一般性的问题;

问题2:我遇到问题,可以拿模式的逐一的解决问题,这样可以吗?

不可以,一般的设计不需要这么做,用好的OO设计原则就可以了。