桥接模式+游戏开发中的设计模式——桥接者模式

设计模式总结之Bridge Pattern(桥接模式)

https://blog.csdn.net/cooldragon/article/details/52173915

何为桥接模式

桥接模式(Bridge):将抽象部分和他的实现部分分离,使他们都可以独立工作

例如:角色装备枪。多种角色A B C,   多种枪1 2 3。

假设A B C使用1;

菜鸟篇:

抽象出一个角色类O,具体的角色继承它    得到O-A  O-B  O-C;

然后,创建具体多种枪类,让具体角色使用那把枪,继承那个枪类  得到A-1 B-1 C-1。

此时若换枪2,则具体的角色都要更改 得到A-2 B-2 C-2;

桥接模式篇

将枪也抽象出来G(抽象出方法Attack()等)     ,具体枪继承他 得到G-1(override Attack())      G-2(override Attack())      G-3(override Attack())     

然后为了应对换枪,先在角色O中获取G(抽象方法Attack()等),使用形参 G      构造方法 或者  普通方法

最后使用多态   对象的声明必须为父类;实例化的对象是子类   从而O获取到G被重写过的方法override Attack(),则所有的A B C获得override Attack(),从而完成了更换枪的操作。

案例:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class DN02Bridge : MonoBehaviour {
    void Start() {
        IRenderEngine iRenderEngine = new OpenGL();//多态
        //IRenderEngine iRenderEngine = new Dirext();//更换枪

        Sphere sphere = new Sphere(iRenderEngine);
        sphere.Draw();

        Cube cube = new Cube(iRenderEngine);
        cube.Draw();
    }
	
}
//抽象-角色-O
public class Ishape{
    public string name;
    public IRenderEngine renderEngine;//获取抽象枪01

    public Ishape(IRenderEngine irenderEngine)//获取抽象枪02   构造方法
    {
        this.renderEngine = irenderEngine;
    }

    public void Draw() {
        renderEngine.Render(name);
    }
}
//抽象-枪-G
public abstract class IRenderEngine {
    public abstract void Render(string name);//攻击方法
}




//具体角色A
public class Sphere:Ishape {
    public Sphere(IRenderEngine re) :base(re)
    {
        name = "Sphere";
    }
    //public string name = "Sphere";

    //public OpenGL openGL = new OpenGL();
    //public Dirext dirext = new Dirext();
    //public void Draw() {
    //    openGL.Render(name);
    //}
}
//具体角色B
public class Cube:Ishape {
    public Cube(IRenderEngine re): base(re)
    {
        name = "Cube";
    }
    //public string name = "Cube";

    //public OpenGL openGL = new OpenGL();
    //public Dirext dirext = new Dirext();
    //public void Draw() {
    //    openGL.Render(name);
    //}
}
//具体枪1
public class OpenGL:IRenderEngine 
{ 
    public override void Render(string name )//重写攻击方法
    {
        Debug.Log("OpenGL绘制出来了");   
    }
    
}
//具体枪2
public class Dirext:IRenderEngine
{
    public override void Render(string name)
    {
        Debug.Log("Dirext绘制出来了");
    }

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值