游戏开发设计模式--桥接模式

情景

现在假设要定义一些图形,这些图形按形状可分为圆形、三角形,按颜色可分为红色图形,绿色图形。

直接了当的实现方式

根据上述描述分别根据形状、颜色分类
在这里插入图片描述
一共有四种图形(实现类):红色圆形,红色三角形,绿色圆形,绿色三角形
在这里插入图片描述
面对变化时: 当新增一种颜色时,每个形状都要新增对应一个实现类,假设有n种形状,m种颜色,需要实现n*m个类,太过繁琐。

解决思路: 将颜色作为一个属性组合到形状当中。
在这里插入图片描述
这时,新增一个颜色或形状时,只需要加对应的一个实现类。

桥接模式

GOF中的定义: 将抽象与实现分离,使得二者可以独立地变化。

上述情景中,“实现”指的是形状,“抽象”指的是颜色,二者分离之后,都可以独立变化而互不影响。

更通俗地来说,当一个群组能根据多个维度进行划分时,可选择其中的一个维度作为“实现”即载体,而将其他的维度作为“抽象”部分,嵌入到“实现”中。

  • 抽象群组只负责新增抽象的内容(即颜色),红色、绿色都不是具体的图形。
  • 实现群组(形状)中嵌入了抽象部分(颜色),形状+颜色定义的是具体的图形。

使用场景

桥接模式的定义虽然较难以理解,但是应用起来十分简单且顺理成章。

例如:角色与武器的实现

CharacterBase

public abstract CharacterBase{
	/*
	*	properties
	*/
	private WeaponBase m_weapon;
	public WeaponBase Weapon{
		get{return m_weapon;}
		set{
			m_weapon = value;
			m_weapon.owner = this;
		}
	}

	//攻击
	public override void Attack(CharacterBase target){
		if(m_weapon != null){
			m_weapon.Attack(target);
		}
	}
}

WeaponBase

public abstract WeaponBase{
	/*
	*	properties
	*/
	public CharacterBase owner;
	public abstract void Attack(CharacterBase target);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值