设计模式-(桥接模式)

定义

定义一个接口类,然后实现的部分在子类中完成。

组成部分

Abstraction (抽象体接口)
拥有直向Implementor的对象引用。
定义抽象对象的接口,也可作为子类调用实现功能的接口。
RefindAbstraction(抽象体实现,扩充)
继承抽象体并调用Implementor完成实现功能。
扩充抽象体的接口,增加额外的功能。
Implementor(实现体接口)
定义实现功能的接口,提供Abstraction使用
接口功能可以只有单一的功能,真正的选择是由Abstraction的需求加以组合应用。
ConcreteImplementorAB(实现体)
实际完成实现接口上的定义的方法。

游戏应用

在设计植物大战僵尸的植物攻击时,可以分普通子弹攻击和投射攻击等等,所以我们可以把植物作为抽象体,攻击方式作为实现体。
Abstraction实现, ICharacter作为植物和僵尸的父类,拥有指向武器IWeapon对象的引用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class ICharacter
{
    private IWeapon m_Weapoon = null;

    public void SetWeapon(IWeapon weapon)
    {
        m_Weapoon = weapon;
    }

    public IWeapon GetWeapon()
    {
        return m_Weapoon;
    }

    public void SetWeaponPlusAttack()
    {
        m_Weapoon.Fire();
    }



    public abstract void Attack();
}

RefinedAbsraction实现,这里介绍植物的,实现父类的Attack的方法

public class IPlant : ICharacter
{
    public override void Attack()
    {
        SetWeaponPlusAttack();
    }
}

Implementor实现

public abstract class IWeapon
{

    public abstract void Fire();
    
}

ConcreteImplementorAB实现,Weapon_1 和Weapon_2中实现具体攻击实现(包括攻击特效,音效等等)

public class Weapon_1 : IWeapon
{
    //普通攻击
    public override void Fire()
    {
        Debug.Log("普通攻击");
    }
}

public class Weapon_2 : IWeapon
{
    //投射攻击
    public override void Fire()
    {
        Debug.Log("投射攻击");
    }
}

优缺点

该优点是降低系统之间的耦合,上面用例中ICharacter就是抽象类,定义了攻击目标的功能,而实现真正的攻击类是IWeapon里。对于两者不必理会双方的变化,尤其是游戏开发后期可能增加的武器或者角色类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值