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();
            }
        }
  • 相关阅读:
    洛谷P1339 [USACO09OCT]热浪Heat Wave 题解
    洛谷P2692 覆盖 题解
    ELK logstash geoip值为空故障排查
    Linux_LVM_磁盘扩容
    通过zabbix的API接口获取服务器列表
    linux下安装部署ansible
    nginx 错误502 upstream sent too big header while reading response header from upstream
    docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
    Python学习之MySQLdb模块
    Nginx模块 ngx_http_limit_req_module 限制请求速率
  • 原文地址:https://www.cnblogs.com/vichin/p/11592877.html
Copyright © 2011-2022 走看看