• 设计模式之桥接模式


        这节讲桥接模式(Bridge Pattern)。

        在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。

        为了解决上述问题,就出现了桥接模式,桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

        他的优点是:抽象与实现分离,扩展能力强符合开闭原则,符合合成复用原则,实现细节对客户透明,但由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,无疑增加了系统的理解与设计难度。

        下面通过包包有多种颜色为例演示一下桥接模式:

     class Program
        {
            static void Main (string[] args)
            {
                new LV(new Red()).BagColor();
                new LV(new Green()).BagColor();
                Console.ReadKey();
            }
        }
    
    
        /// <summary>
        /// 包包的颜色属性抽象(属性不止一种,此处为简化代码,只写一种属性的抽象)
        /// </summary>
        interface IColor
        {
            void showColor();
        }
    
        /// <summary>
        /// 属性的实现
        /// </summary>
        class Red:IColor
        {
            public void showColor()
            {
                Console.WriteLine("我是红色的。");
            }
        }
        /// <summary>
        /// 属性的实现
        /// </summary>
        class Green:IColor
        {
            public void showColor()
            {
                Console.WriteLine("我是绿色的。");
            }
        }
    
        /// <summary>
        /// 包包的抽象
        /// </summary>
        abstract class Bag
        {
            public IColor color = null;
    
            /// <summary>
            /// 实现不同颜色的表现
            /// </summary>
            /// <param name="color">注入包包颜色实现</param>
            public Bag(IColor color)
            {
                this.color = color;
            }
    
            public abstract void BagColor();
        }
    
        /// <summary>
        /// 具体的包包实现
        /// </summary>
        class LV:Bag
        {
            public LV(IColor color) : base(color)
            {
            }
    
            public override void BagColor()
            {
                color.showColor();
            }
        }

     运行结果如下:

     

     女士皮包有很多种,可以按用途分、按皮质分、按品牌分、按颜色分、按大小分等,存在多个维度的变化,所以采用桥接模式来实现女士皮包的选购比较合适。

        个人公众号,热爱分享,知识无价。

  • 相关阅读:
    Centos下,Docker部署Yapi接口管理平台(详细得令人发指)
    Centos7下安装Docker(详细的新手装逼教程)
    性能测试之nmon对linux服务器的监控
    真爱至上,谈谈我的测试经历(二)
    linux问题点滴,给普通用户添加sudo权限
    浅谈软件测试流程(一)
    面试如何谈笑风生,软件测试基础理论整理
    测试与开发如何有效沟通,QC11(HP ALM 11)的简单使用记录
    解决github访问过慢问题
    Python语言下图像的操作方法总结
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13955663.html
Copyright © 2020-2023  润新知