zoukankan      html  css  js  c++  java
  • 设计模式之—桥接模式<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

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

    要么忍,要么狠,要么滚!
  • 相关阅读:
    Mac OS X各版本号的历史费用和升级关系
    Openlayers2中统计图的实现
    CentOS下Redisserver安装配置
    最小生成树算法
    机器学习---支持向量机(SVM)
    Android HttpURLConnection源代码分析
    Lighttpd1.4.20源代码分析 笔记 状态机之错误处理和连接关闭
    <html>
    【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】
    软件开发中的11个系统思维定律
  • 原文地址:https://www.cnblogs.com/zxd543/p/3263045.html
Copyright © 2011-2022 走看看