博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式---桥连模式(DesignPattern_Bridge)
阅读量:5862 次
发布时间:2019-06-19

本文共 2723 字,大约阅读时间需要 9 分钟。

DesignPattern_Bridge

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。

源码注释及命名有所更改,个人感觉会比原版更好理解

  • 桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
using UnityEngine;using System.Collections;namespace DesignPattern_Bridge{    // 抽象操作者基类    public abstract class Implementor    {        public abstract void OperationImp();    }    //操作者1以及先关操作    public class ConcreteImplementor1 : Implementor    {        public ConcreteImplementor1(){}        public override void OperationImp()        {            Debug.Log("執行Concrete1Implementor.OperationImp");        }    }    //操作者2以及先关操作    public class ConcreteImplementor2 : Implementor    {        public ConcreteImplementor2(){}                public override void OperationImp()        {            Debug.Log("執行Concrete2Implementor.OperationImp");        }    }    // 扩展操作基类    public abstract class Abstraction    {        private Implementor m_Imp = null;        public void SetImplementor( Implementor Imp )        {            m_Imp = Imp;        }        public virtual void Operation()        {            if( m_Imp!=null)                m_Imp.OperationImp();        }    }    // 扩展操作1    public class RefinedAbstraction1 : Abstraction    {        public RefinedAbstraction1(){}        public override void Operation()        {            Debug.Log("物件RefinedAbstraction1");            base.Operation();        }    }    // 扩展操作2    public class RefinedAbstraction2 : Abstraction    {        public RefinedAbstraction2(){}        public override void Operation()        {            Debug.Log("物件RefinedAbstraction2");            base.Operation();        }    }}
using UnityEngine;using System.Collections;using DesignPattern_Bridge;public class BridgeTest : MonoBehaviour{    void Start()    {        UnitTest();    }    //     void UnitTest()    {        // 生成扩展操作1        Abstraction theAbstraction = new RefinedAbstraction1();        // 设定相关操作1        theAbstraction.SetImplementor(new ConcreteImplementor1());        theAbstraction.Operation();        // 设定相关操作2        theAbstraction.SetImplementor(new ConcreteImplementor2());        theAbstraction.Operation();        // 生成扩展操作2        theAbstraction = new RefinedAbstraction2();        // 设定相关操作1        theAbstraction.SetImplementor(new ConcreteImplementor1());        theAbstraction.Operation();        // 设定相关操作2        theAbstraction.SetImplementor(new ConcreteImplementor2());        theAbstraction.Operation();    }}

转载地址:http://udgjx.baihongyu.com/

你可能感兴趣的文章
linux设备驱动第三篇:写一个简单的字符设备驱动
查看>>
Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
查看>>
你可能不知道的10个JavaScript小技巧
查看>>
MySQL innodb_rollback_on_timeout参数对锁的影响
查看>>
Spring基于 Annotation 的简单介绍
查看>>
#1366 - Incorrect integer value: '' for column ...
查看>>
android之Handler控制进度条
查看>>
scala学习之自定义RPC框架
查看>>
unity 场景贴图闪烁
查看>>
Ubuntu Linux 下安装Sapgui740
查看>>
你不懂我 我不怪你
查看>>
使用 JMeter 完成常用的压力测试
查看>>
干货 | 机器学习需要哪些数学基础?
查看>>
VS 2010 运行错误: LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏...
查看>>
关于mysql中中文都是问号的问题
查看>>
FFmpeg结构体彻底分析——AVCodec
查看>>
Python练习【3】【罗马数字转换/查找公共前缀】
查看>>
Java多线程理解:线程安全的集合对象
查看>>
马哥linux作业--第一周
查看>>
使用无线投屏软件将手机和电脑画面同步
查看>>