zoukankan      html  css  js  c++  java
  • 桥接模式 -- 大话设计模式

    在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

    桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。一个类存在两个独立变化的维度,而且两个维度都需要进行扩展的时候,可以使用桥接模式

    1.不同品牌手机要安装不同的手机软件(注意:高层要引用底层,三层架构中就运用了桥接模式,BLL层中通过桥接模式与DAL解耦,其实现方式就是BLL层中添加了DAL层的引用,这样数据库底层的改变就不会影响客户端的实现了)

      定义手机软件(底层)抽象类和具体软件类

        /// <summary>
        /// 手机软件
        /// </summary>
        public abstract class HandsetSoft
        {
            public abstract void Run();
        }
    
        /// <summary>
        /// 手机游戏
        /// </summary>
        public class HandsetGame : HandsetSoft
        {
            public override void Run()
            {
                Console.WriteLine("运行手机游戏");
            }
        }
    
        /// <summary>
        /// 手机通讯录
        /// </summary>
        public class HandsetAddressList : HandsetSoft
        {
            public override void Run()
            {
                Console.WriteLine("运行手机通讯录");
            }
        }
    

       定义手机品牌(高层)抽象类和具体品牌类

        /// <summary>
        /// 手机品牌
        /// </summary>
        public abstract class HandsetBrand
        {
            protected HandsetSoft soft;
    
            /// <summary>
            /// 品牌需要关注软件,所以可在机子中安装软件
            /// </summary>
            public void SetHandsetSoft(HandsetSoft soft)
            {
                this.soft = soft;
            }
    
            public abstract void Run();
        }
    
        /// <summary>
        /// 手机品牌M
        /// </summary>
        public class HandsetBrandM : HandsetBrand
        {
            public override void Run()
            {
                this.soft.Run();
            }
        }
    
        /// <summary>
        /// 手机品牌N
        /// </summary>
        public class HandsetBrandN : HandsetBrand
        {
            public override void Run()
            {
                this.soft.Run();
            }
        }
    

       开启场景模拟

            static void Main(string[] args)
            {
                HandsetBrand ab = new HandsetBrandM();
    
                ab.SetHandsetSoft(new HandsetGame());
                ab.Run();
    
                ab.SetHandsetSoft(new HandsetAddressList());
                ab.Run();
            }
    
  • 相关阅读:
    RabbitMQ高级部分
    深入了解RabbitMQ
    js控制mui-popover弹出与关闭及移动网盘分享文件格式
    Hbuilder页面之间的跳转及关闭功能
    页面下载远程服务器单个及多个文件并打成压缩包下载到本地
    手机端下载文件及创建文件夹
    input上传文件对象
    上传文件解决获取multi=JakartaMultiPartRequest问题
    jsp页面选择文件上传,获取不到绝对路径问题
    activiti官网实例项目activiti-explorer之扩展多选框回显功能
  • 原文地址:https://www.cnblogs.com/amywechat/p/4936219.html
Copyright © 2011-2022 走看看