结构型模式-桥接Bridge模式

桥接模式是通过将抽象和实现分离,让它们可以分别独立地变化,它强调的是系统沿着多个方向的变化;

适配器模式和桥接模式具有一些共同的特征:他们都给另一对象提供了一定程度上的间接性,因而有利于系统的灵活性;它们都涉及从自身以外的一个接口向这个对象转发请求。这两种模式的不同之处主要在于它们各自的用途。适配器模式主要是为了解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的;而桥接模式则对抽象接口与它的实现部分进行桥接。虽然这一模式允许修改实现它的类,但仍然为用户提供了一个稳定的接口。

桥接模式的结构包括Abstraction、RefinedAbstraction、Implementor、ConcreteImplementorA和ConcreteImplementorB五个部分,其中:

Abstraction:定义抽象类的接口,它维护了一个指向Implementor类型对象的指针。

RefinedAbstraction:扩充由Abstraction定义的接口;

Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上两个接口可以完全不同。一般情况,Implementor接口仅为提供基本操作,而Abstraction则定义了基于基本操作的较高层次操作。

ConcreteImplementorA和ConcreteImplementorB:实现Implementor接口并定义它的具体实现。

在桥接模式中,两个类Abstraction和Implementor分别定义了抽象与行为类型的接口,通过调用两接口的子类实现抽象与行为的动态组合。

结构图



namespace Libraries.Test.DesignPattern.Bridge
{
    public interface IMakeTea
    {
        string Making();
    }
}
namespace Libraries.Test.DesignPattern.Bridge
{
    public class MakeBlackTea : IMakeTea
    {
        public string Making()
        {
            return "红茶";
        }
    }
}
namespace Libraries.Test.DesignPattern.Bridge
{
    public class MakeGreenTea : IMakeTea
    {
        public string Making()
        {
            return "绿茶";
        }
    }
}

namespace Libraries.Test.DesignPattern.Bridge
{
    public abstract class Tea
    {
        protected IMakeTea makeTea;

        public Tea(IMakeTea _makeTea)
        {
            this.makeTea = _makeTea;
        }

        public abstract string Make();
    }
}
namespace Libraries.Test.DesignPattern.Bridge
{
    public class LargeCupTea : Tea
    {
        public LargeCupTea(IMakeTea makeTea) : base(makeTea)
        {

        }

        public override string Make()
        {
            return "大杯" + makeTea.Making();
        }
    }
}

namespace Libraries.Test.DesignPattern.Bridge
{
    public class MediumCupTea : Tea
    {
        public MediumCupTea(IMakeTea makeTea) : base(makeTea)
        {

        }

        public override string Make()
        {
            return "中杯" + makeTea.Making();
        }
    }
}

namespace Libraries.Test.DesignPattern.Bridge
{
    public class Client
    {
        public void Excute()
        {
            //大杯红茶
            LargeCupTea largeCupTea = new LargeCupTea(new MakeBlackTea());
            string largeCupTeaStr = largeCupTea.Make();

            //中杯绿茶
            MediumCupTea mediumCupTea = new MediumCupTea(new MakeGreenTea());
            string mediumCupTeaStr = mediumCupTea.Make();

        }
    }
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值