桥接模式 - Unity

桥接模式

桥接模式是一种对象结构性模式,作用是在复杂或多维度的对象中,将抽象和实现分离,用聚合或组合的方式替代继承来实现,从而降低抽象和实现多个可变维度的耦合度。

我们生活中有很多例子,如遥控器和电视机,遥控器是抽象维度,电视机是实现维度。使用者只需关注抽象维度即可。也有将对象分为两种或多种组合式的维度,如物体和颜色,紫色的正方形,蓝色的圆形等,物体是一个维度,颜色是一个维度。

结构

在这里插入图片描述

说明

  • 抽象化(Abstraction)- 提供高层控制逻辑,其操作依赖于实现化。
  • 精确抽象 (Refined Abstraction)- 是抽象化的变体,其操作同样依赖于实现化
  • 实现化(Implementor)- 为具体实现声明通用的接口。提供功能抽象
  • 具体实现(Concrete Implementor)- 实现接口方法

实现

实现化 - 怪物接口

public interface IMonster
{
    void Attack();
    void Die();
}

具体实现 - 机器人,坦克

public class Robot : IMonster
{
    public void Attack()
    {
        Debug.Log("打了一拳");
    }

    public void Die()
    {
        Debug.Log("死亡");
    }
}

public class Tank : IMonster
{
    public void Attack()
    {
        Debug.Log("发出炮弹");
    }

    public void Die()
    {
        Debug.Log("报废");
    }
}

抽象化 - 怪物控制器

public abstract class MonsterController
{
    protected IMonster _monster;

    public MonsterController(IMonster monster)
    {
        _monster = monster;
    }

    public abstract void Attack();
    public abstract void Die();
}

精确控制 - 机器人控制器,坦克控制器

public class RobotController : MonsterController
{
    public RobotController(IMonster monster) : base(monster)
    {
    }

    public override void Attack()
    {
        Debug.Log("机器人: ");
        _monster.Attack();
    }

    public override void Die()
    {
        Debug.Log("机器人: ");
        _monster.Die();
    }
}

public class TankController : MonsterController
{
    public TankController(IMonster monster) : base(monster)
    {
    }

    public override void Attack()
    {
        Debug.Log("坦克: ");
        _monster.Attack();
    }

	public override void Die()
    {
        Debug.Log("坦克: ");
        _monster.Die();
    }
}

调用

public class BridgeExample : MonoBehaviour
{
    private void Start()
    {
        MonsterController controller1 = new RobotController(new Robot());
        MonsterController controller2 = new TankController(new Tank());

        controller1.Attack();
        controller1.Die();

        controller2.Attack();
        controller2.Die();
    }
}

在这里插入图片描述

应用场景

  • 你需要拆分或重组一个多重功能的复杂类,从而降低类的复杂度。
  • 你需要将一个类分为多个独立维度,来降低各个独立维度的耦合性。

利与弊

优点

  • 调用端只需关注抽象化即可,无需接触实现化相关类
  • 满足开闭原则,各个维度自行扩展,互不干涉。
  • 抽象化,只关注依赖于实现化的高层逻辑,实现化则关注功能的实现,符合单一职责原则

缺点

  • 对高内聚的类使用,可能会让代码更加复杂

桥接模式,听着很玄乎,抽象化和实现化等,但实际上十分容易。抽象化本身就是为了对多个维度的实现化进行综合,从而相互交互,本身不进行功能实现,只关注逻辑。但也可以通过精确抽象的方式,去扩展多种不同的实现逻辑。其中遥控器和电视机,就是很好的例子。

通过继承的方式来完成抽象和实现的关系,适用于简单的类,对于复杂或多维度的对象,适用桥接来实现抽象化和实现化,非常合适。

​🐉​🐉​🐉​🐉​🐉

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值