桥模式解决的是这样的一个情况:当一个对象有多个变化维度的时候,我们就可以用桥模式来优化;

什么意思呢?比如我写游戏遇到这样的情景:

现在有一个monster基类,他有Health脚本,也有FSM脚本,还有技能脚本和动作脚本,每个脚本都是一个变化方向,如果把他们都耦合到一个类里面来实现,那么是非常非常恶心人的一件事情,我们发布一种单位[继承Monster],都要重写一边所有脚本,代码重复非常非常严重,这个重复的原因是我们将每个脚本都耦合在一起了,比如我们只改变了FSM脚本,其他的脚本我们不需要改变,但因为高耦合性和继承带来的静态性质,我们不得不重写。

桥模式给了我们一个解决上面尴尬情况的解决方案,其核心思想是将每个变化维度独立出来,怎么弄呢?多态指针!看下面的UML图:

 我们将每个变化方向封装成一个类,然后继承接口,接着我们设计一个类,拥有每个变化方向的接口指针[姑且叫F类],这样,每个变化维度就都不相互干扰了;

示例代码如下:

class HealthBase {
protected:
	virtual void Do() = 0;
};

class Health1 :public HealthBase {
	//......
};

class FSMBase {
protected:
	virtual void Do() = 0;
};

class FSM1 :public FSMBase {
	//......
};

class BehaviorBase {
protected:
	virtual void Do() = 0;
};

class Behavior1 {
	//......
};

class MonsterBase {
public:
	HealthBase* Health;
	FSMBase* FSM;
	BehaviorBase* Behavior;

};

class Monster1:public MonsterBase {

};

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐