zoukankan      html  css  js  c++  java
  • 桥接模式

    对象的继承关系是在编译的时候就定义好的,所以无法在运行时改变从父类集成的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类的时候,如果继承下来的实现并不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

    组合优于继承的体现

        abstract class Handsetsoft
        {
            public abstract void Run();
        }
    
        class HandsetAddressList : Handsetsoft
        {
            public override void Run()
            {
                Console.WriteLine("运行手机通信录");
            }
        }
    
        class HandsetGame : Handsetsoft
        {
            public override void Run()
            {
                Console.WriteLine("手机能够运行游戏");
            }
        }
    
        //使用桥接模式,将原本所应继承的Handsetsoft接口,通过组合的方式引入进来,这样当接口中的内容发生变化的时候,就不需要更改所有实现接口的子类。
        //这也就是为什么书中并没有使用接口而是使用抽象类来定义接口,因为这样就无法让新生成的手机品牌(HandsetBrandN)既能继承HandsetBrand,同时还能继承Handsetsoft。
       abstract class HandsetBrand
       {
           protected Handsetsoft soft;
           //设置手机软件
           public void SetHandsetSoft(Handsetsoft soft) {
               this.soft = soft;
           }
           public abstract void Run();
        }
    
        //使用桥接模
        class HandsetBrandN : HandsetBrand
        {
            public override void Run()
            {
                soft.Run();
            }
        }
        //使用继承的方式
        class HandsetBrandM : Handsetsoft, HandsetBrand
        {
            //todo……继承并实现接口中的内容。
            //当接口中的功能新增的时候,那么以前写好的代码,都要去实现新增的接口,当类多的时候,就会很麻烦。
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                HandsetBrand ab = new HandsetBrandN();
                ab.SetHandsetSoft(new HandsetGame());
                ab.Run();
    
                ab.SetHandsetSoft(new HandsetAddressList());
                ab.Run();
            }
        }
  • 相关阅读:
    oracle数据表批量插入查询到的数据
    Eclipse EXCEPTION_ACCESS_VIOLATION 崩溃解决办法
    js获取当前URL、主机端口、网络协议、请求参数
    java.util.ConcurrentModificationException异常分析
    Java跨平台调接口同时更新同一条数据发生阻塞
    centos7+mariadb+防火墙,允许远程
    centos7安装JDK
    centos7安装python3
    VMware 中安装KVM,模块不加载
    C++程序结构.1
  • 原文地址:https://www.cnblogs.com/vichin/p/11592877.html
Copyright © 2011-2022 走看看