设计模式——桥接模式

桥接模式

桥接模式是用于把抽象化与实现化解耦,使得两者可以独立变化。(属于结构型模式的一种)。这种模式主要是设计一个作为桥接的接口,使继承他的实体类能够独立于这个接口实现,不受其桥接接口的影响。

优点:1.抽象和实体分离。2.扩展能力强。3.实现细节对用户透明。
缺点:会增加系统的理解和设计难度。

关键逻辑:抽象类依赖实体类。
何时使用:系统的实现有多个角度,每个角度都有所变化。这时就需要使用桥接模式把这种多角度分类分离出来,让他们独立变化。

下面我列举一个例子作为参考:人开灯的例子,一共有卧室,客厅两个灯,主人可以选择用遥控和手动的方法进行开灯和关灯。
如图:在这里插入图片描述
这样看起来如果用代码写很麻烦,有很多重复代码。所以我们才会想的用设计模式,是代码更简洁,扩展性更高。
在这里插入图片描述
如上图,我们可以根据人的想法,通过开关这个桥接类,很好的控制用户想要的灯。

用代码做一个例子如下:
1.首先创建一个灯的接口。

/// <summary>
/// 灯的接口
/// </summary>
public interface Light
{
     void Open( );
     void Close( );
}

2.创建灯的实体。来实现这个接口。

/// <summary>
/// 客厅的灯
/// </summary>
class DrawingRoom_Light : Light
{
    public void Close( )
    {
        Debug.Log("客厅的灯关了");
    }

    public void Open( )
    {
        Debug.Log("客厅的灯开了");
    }
}
/// <summary>
/// 卧室的灯
/// </summary>
class Bedroom_Light : Light
{
    public void Close( )
    {
        Debug.Log("卧室的灯关了");
    }

    public void Open( )
    {
        Debug.Log("卧室的灯开了");
    }
}

3.创建开关的抽象类。

/// <summary>
/// 开关
/// </summary>
public abstract class Switch
{
    public  Light light;
    public  Switch(Light light)
    {
        this.light = light;
    }
   

    public abstract void Open();
    public abstract void Close();
}

4.创建实现开关的实体类,手动和遥控类。

/// <summary>
/// 手动
/// </summary>
public class Manual : Switch
{
    
    public Manual( Light light):base(light)
    {
        Debug.Log("手动的让");
    }
    public override void Close()
    {
        
        light.Close();
    }

    public override void Open()
    {
        light.Open();
    }  
}
/// <summary>
/// 遥控
/// </summary>
/// <summary>
/// 遥控
/// </summary>
public class Remote : Switch
{
    public Remote(Light light) : base(light)
    {
        Debug.Log("遥控的让");
    }
    public override void Close()
    {
        light.Close();
    }

    public override void Open()
    {
        light.Open();
    }
}

5.创建最重要的类,人(People)类。

public class People : MonoBehaviour
{
    void Start()
    {
        //人想用什么方式开哪个灯只需要新实例化一个实体类就可以。
        Switch switchs=new Manual(new Bedroom_Light());
        switchs.Open();

        Switch switchs1=new Manual(new DrawingRoom_Light());
        switchs.Open();

        Switch switchs2=new Remote(new Bedroom_Light());
        switchs.Open();

        Switch switchs3=new Remote(new Bedroom_Light());
        switchs.Open();
    }
}

运行结果:在这里插入图片描述
本人写博客也是为了学习,方便自己的理解。如果有不正确的欢迎指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值