• 设计模式之—桥接模式<Bridge Pattern>


    桥接模式:将抽象部分和它的实现部分分离,使他们可以独立的变化。实现指的是抽象类和它的派生类用来实现自己的对象。如手机软件和品牌分开实现。已达到松耦合的目地。

    合成聚合复用原则:聚合是弱的“拥有关系”,体现A对象可以包含B对象,但B对象不是A对象的一部分 如:大雁和雁群

                            合成是强的“拥有关系”,体现了严格的整体和部分的关系部分和整体的生命周期一致,如:大雁和燕翅

    桥接模式采用的是聚合原则,将手机品牌和手机软件分开设计

    本实例以手机品牌和手机软件为例:

    手机软件抽象类(PhoneSoft)

    namespace BridgePattern.CLASS
    {
        abstract class PhoneSoft
        {
            public abstract void Run();
        }
    }
    View Code

    通讯录(PhoneAddressList)继承于手机软件抽象类

    namespace BridgePattern.CLASS
    {
        class PhoneAddressList:PhoneSoft
        {
            public override void Run()
            {
                Console.WriteLine("打开手机通讯录");
            }
        }
    }
    View Code

    游戏类(PhoneGame)继承于手机软件抽象类

    namespace BridgePattern.CLASS
    {
        class PhoneGame:PhoneSoft
        {
            public override void Run()
            {
                Console.WriteLine("运行手机游戏!");
            }
        }
    }
    View Code

    手机品牌抽象类(PhoneBrands)

    namespace BridgePattern.CLASS
    {
        abstract class PhoneBrands
        {
            //关键代码
           protected PhoneSoft soft;
            public void SetPhoneSoft(PhoneSoft soft)
            {
                this.soft = soft;
            }
            public abstract void Run();
        }
    }
    View Code

    手机品牌N(PhoneBrandN)继承于手机品牌抽象类

    namespace BridgePattern.CLASS
    {
        class PhoneBrandN:PhoneBrands
        {
            public override void Run()
            {
                soft.Run();
            }
        }
    }
    View Code

    手机品牌M(PhoneBrandM)继承于手机品牌抽象类

    namespace BridgePattern.CLASS
    {
        class PhoneBrandM:PhoneBrands
        {
            public override void Run()
            {
                soft.Run();
            }
        }
    }
    View Code

    测试类(TestMain)

    namespace BridgePattern
    {
        class TestMain
        {
            static void Main(string[] args)
            {
                Console.WriteLine("------N牌手机功能------");
                PhoneBrands pbN = new PhoneBrandN();
                pbN.SetPhoneSoft(new PhoneGame());
                pbN.Run();
                pbN.SetPhoneSoft(new PhoneAddressList());
                pbN.Run();
    
                Console.WriteLine("------M牌手机功能------");
                PhoneBrands pbM = new PhoneBrandM();
                pbM.SetPhoneSoft(new PhoneGame());
                pbM.Run();
                pbM.SetPhoneSoft(new PhoneAddressList());
                pbM.Run();
            }
        }
    }
    View Code

    此方式无论增加品牌还是增加软件互相不会受影响,降低了代码的耦合度

    要么忍,要么狠,要么滚!
  • 相关阅读:
    What Is Pros and Cons
    计算机编程简史图
    封装事件订阅发布 on emit off
    父子通信VUE
    如何让textarea不可拖拽
    [导入]Web Client Software Factory系列(1):初识与预备知识
    [导入]Enterprise Library v3中的新成员:Application Block Software Factory
    [导入]Web Client Software Factory 开发路线图
    [导入]微软Web Client Software Factory RC版发布
    [导入]Web Client Software Factory系列(3):ViewPresenter模式
  • 原文地址:https://www.cnblogs.com/zxd543/p/3263045.html
Copyright © 2020-2023  润新知