【Unity3D与23种设计模式】桥接模式(Bridge)
GoF定义:
“将抽象与实现分离,使二者可以独立的变化”
游戏中,经常有这么一种情况
基类角色类(ICharacter),下面有子类士兵类(ISoldier)、敌军类(IEnemy)
基类武器类(IWeapon),下面有子类枪类(IGun)、炮类(ICannon)
当然,有用枪的士兵,有用炮的士兵

这么一组合,就是2*2 = 4个类
游戏后期,当角色类添加一个角色类时,变成了2*3 = 6个类
若再添加一个武器类,3*3 = 9个类
类成倍数增长
维护起来也就越来越困难
这种两个类群组之间,“交叉组合汇编”的情况
桥接模式是一种解决方法
群组一类中的每一个类,可以使用“群组二类”中的每一个类来实现所定义的功能

using UnityEngine;
public abstract class IWeapon{
public abstract void DamageValue(ICharacter character);
}
public class IGun : IWeapon {
public override void DamageValue(ICharacter character)
{
Debug.Log("Gun");
}
}
public class ICannon : IWeapon {
public override void DamageValue(ICharacter character)
{
Debug.Log("Cannon");
}
}
public abstract class ICharacter {
protected IWeapon m_Weapon = null;
public void SetWeapon(IWeapon theWeapon) {
m_Weapon = theWeapon;
}
public abstract void InstantiateCharacter();
}
public class ISoldier : ICharacter {
public override void InstantiateCharacter()
{
m_Weapon.DamageValue(this);
}
}
public class IEnemy : ICharacter {
public override void InstantiateCharacter()
{
m_Weapon.DamageValue(this);
}
}
上面代码只为演示桥接模式设计思想使用
若想使用到自己的工程中
还需结合自己工程写出代码
【Unity3D与23种设计模式】桥接模式(Bridge)的更多相关文章
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 设计模式--桥接模式Bridge(结构型)
一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...
- 设计模式 -- 桥接模式(Bridge)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...
- 大话设计模式--桥接模式 Bridge -- C++实现实例
1. 桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 分离是指 抽象类和它的派生类用来实现自己的对象分离. 实现系统可以有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出 ...
- [工作中的设计模式]桥接模式bridge
一.模式解析: 策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式. 桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统 ...
- C#设计模式——桥接模式(Bridge Pattern)
一.概述在软件开发中,我们有时候会遇上一个对象具有多个变化维度.比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车.轿车等,也可能存在不同的发动机,如汽油发动机.柴油发动机等.对这类对象,可应用桥 ...
- php 23种设计模式 - 解释器模式
给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.角色:环境角色(PlayContent):定义解释规则的全局信息.抽象解释器(Empress):定义了部 ...
- php 23种设计模式 - 备忘录模式
备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式. 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该 ...
- php 23种设计模式 - 命令模式
命令模式 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 命令模式以松散耦合主题为基础,发送消息.命令和请求,或通过一组处理程序发送 ...
随机推荐
- iOS应用如何得知用户有新拍的图片?
首先,应用要知道图片库中的新图片,最重要是要有图片库的访问权限.然后每张图片除了图片本身的构成要素(像素)外,还会保存图片的拍摄时间(时间戳),地点等相关信息.时间戳就是判断新拍照片的最主要依据.
- python数据可视化学习1
import matplotlib.pyplot as plt input_values = [1,2,3,4,5] #输入值 squares = [1,4,9,16,25] #输出值 plt.plo ...
- hdu 1878 无向图的欧拉回路
原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...
- Nginx反向代理实现Tomcat负载均衡
这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...
- 用eclipes写第一个HelloWorld
打开 eclipes 后,首先点击左上角新建按钮,新建一个项目,如图: 选择 Java Project 选项: 如果没有java Project这个选项的话,选择次一个的 project 也可以,在跳 ...
- ImportError: No module named 'xlrd' 解决办法
import pandas as pd data = pd.read_excel('工作簿1.xls',sheetname='Sheet1') 用pandas读取Excel文件时,会提示 Import ...
- 【mongodb系统学习之一】mongodb的简单安装
linux中mongodb的安装(最简单的): 1.下载mongodb安装包,这里用mongodb-linux-x86_64-2.6.9.gz 提供一个下载地址:http://pan.baidu.co ...
- 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(三)
利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.选择"数据库-->Generate Database...",查看数据库表的SQL语句 2. ...
- Python基础__Python语法基础、条件、循环
之前主要讨论的是Python的对象,这本节将第一次走进Python的语言之旅,将会介绍条件与循环.本节我们将会涉及到复合语句,简要介绍一下Python的语法规则是有必要的Python语法规则 1.语句 ...
- Python机器学习 (Python Machine Learning 中文版 PDF)
Python机器学习介绍(Python Machine Learning 中文版) 机器学习,如今最令人振奋的计算机领域之一.看看那些大公司,Google.Facebook.Apple.Amazon早 ...