• 设计模式--桥接模式


    将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    抽象与它的实现分离,并不是说让抽象类与其派生类分离,因为这没有任何意义,实现指的是抽象类和它的派生类用来实现自己的对象。

    实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

    基本代码:

    //抽象基类

    class Abstraction
    {
    protected Implementor implementor;
    public void SetImpementor(Implementor implementor)
    {
    this.implementor = implementor;
    }

    public virtual void Operation()
    {
    implementor.Operation();
    }

    }

    //抽象基类的一个实现

    class RefinedAbstraction:Abstraction
    {
    public override void Operation()
    {
    implementor.Operation();
    }
    }

    //具体实现的基类

    abstract class Implementor
    {
    public abstract void Operation();
    }

    //具体实现

    class ConcreteImplementorA : Implementor
    {
    public override void Operation()
    {
    Console.WriteLine("具体实现A的方法执行");
    }
    }

    class ConcreteImplementorB : Implementor
    {
    public override void Operation()
    {
    Console.WriteLine("具体实现B的方法执行");
    }
    }

    调用:

    Abstraction ab = new RefinedAbstraction();
    ab.SetImpementor(new ConcreteImplementorA());
    ab.Operation();

    ab.SetImpementor(new ConcreteImplementorB());
    ab.Operation();

    //松耦合的程序

    //手机软件抽象类

    abstract class HandsetSoft
    {
    public virtual void Run(HandsetBrand hb)
    {
    Console.Write(hb.GetType().Name+":");
    }
    }

    //手机游戏

    class HandsetGame:HandsetSoft
    {
    public override void Run(HandsetBrand hb)
    {
    base.Run(hb);
    Console.WriteLine("运行手机游戏");
    }
    }

    //手机通讯录

    class HandsetAddressList:HandsetSoft
    {
    public override void Run(HandsetBrand hb)
    {
    base.Run(hb);
    Console.WriteLine("运行手机通讯录");
    }
    }

    //手机品牌抽象类

    abstract class HandsetBrand
    {
    protected HandsetSoft soft;
    public void SetHandsetSoft(HandsetSoft soft)
    {
    this.soft = soft;
    }
    public virtual void Run(HandsetBrand hb)
    {
    this.soft.Run(hb);
    }
    }

    //手机品牌M

    class HandsetBrandM:HandsetBrand
    {
    }

    //手机品牌N

    class HandsetBrandN:HandsetBrand
    {
    }

    调用:

    HandsetGame game = new HandsetGame();
    HandsetAddressList addressList = new HandsetAddressList();

    HandsetBrand hb = new HandsetBrandM();
    hb.SetHandsetSoft(game);
    hb.Run(hb);
    hb.SetHandsetSoft(addressList);
    hb.Run(hb);

    hb = new HandsetBrandN();
    hb.SetHandsetSoft(game);
    hb.Run(hb);
    hb.SetHandsetSoft(addressList);
    hb.Run(hb);

  • 相关阅读:
    Maven学习总结(二)——Maven项目构建过程练习
    使用Maven搭建Struts2框架的开发环境
    使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
    MyEclipse10安装Log4E插件
    大数据以及Hadoop相关概念介绍
    Servlet3.0学习总结(四)——使用注解标注监听器(Listener)
    Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
    Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
    Servlet3.0学习总结(一)——使用注解标注Servlet
    使用kaptcha生成验证码
  • 原文地址:https://www.cnblogs.com/buzhidaojiaoshenme/p/6731478.html
Copyright © 2020-2023  润新知