博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桥接模式
阅读量:4879 次
发布时间:2019-06-11

本文共 3175 字,大约阅读时间需要 10 分钟。

模式定义

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

当一个对象由多个对象组合而成,使用桥接模式能减少类数量。

UML类图

1236909-20180126184458772-1425790677.png

  • 抽象类(Abstraction) 定义一个成员变量(实现类接口类型) 和赋值方法
  • 扩展抽象类(Refined Abstraction) 实现了在抽象类中定义的抽象业务方法,在扩充抽象类中可以调用 在实现类接口中定义的业务方法
  • 实现类接口(Implementor) 实现部分的基本操作接口
  • 具体实现类(Concrete Implement) 实现了实现类接口

    代码结果

public static class BridgeApp    {        public static void Run()        {            Abstraction ab = new RefinedAbstraction();            ab.Implementor = new ConcreteImplementorA();            ab.Operation();        }    }    public class Abstraction    {        protected Implementor implementor;        public Implementor Implementor        {            set { implementor = value; }        }        public virtual void Operation()        {            implementor.Operation();        }    }    public interface Implementor    {        void Operation();    }    public class RefinedAbstraction : Abstraction    {        public override void Operation()        {            implementor.Operation();        }    }    public class ConcreteImplementorA : Implementor    {        public void Operation()        {            Console.WriteLine("ConcreteImplementorA Operation");        }    }    public class ConcreteImplementorB : Implementor    {        public void Operation()        {            Console.WriteLine("ConcreteImplementorB Operation");        }    }

情景模式

现在智能手机品牌越来越多了,其实大家都明白好的手机都是那不同的部件组装下。这里假设手机主要CPU和内存。哈哈只需要修改CPU与内存就可以生产不同类型的手机

public static class BridgeApp    {        public static void Run()        {            PhoneOne phone1 = new PhoneOne();            phone1.Display();            PhoneTwo phone2 = new PhoneTwo();            phone2.Display();        }    }    public class PhoneOne    {        private CPU _cpu = new HPCPU();        private RAM _ram = new RAM128();        public void Display()        {            Console.WriteLine("Phone one:");            _cpu.Display();            _ram.Display();            Console.WriteLine("------------------------------------------");        }    }    public class PhoneTwo    {        private CPU _cpu = new HPCPU();        private RAM _ram = new RAM64();        public void Display()        {            Console.WriteLine("Phone two:");            _cpu.Display();            _ram.Display();            Console.WriteLine("------------------------------------------");        }    }    public abstract class CPU    {        public abstract void Display();    }    public abstract class RAM    {        public abstract void Display();    }    public class RAM64 : RAM    {        public override void Display()        {            Console.WriteLine("RMS size is 64");        }    }    public class RAM128 : RAM    {        public override void Display()        {            Console.WriteLine("RMS size is 128");        }    }    public class LestinaCPU : CPU    {        public override void Display()        {            Console.WriteLine("CPU Type is LestinaCPU");        }    }    public class HPCPU : CPU    {        public override void Display()        {            Console.WriteLine("CPU Type is HPCPU");        }    }

转载于:https://www.cnblogs.com/LoveTomato/p/8360989.html

你可能感兴趣的文章
web服务器,验证码,Xftp使用方法
查看>>
割点 - 模板
查看>>
Ubuntu 16.04.6 + Win10 双系统时间错误且不一致
查看>>
第三次作业——结对编程
查看>>
ora-12899解决方法
查看>>
(8)关于flexbox的一些想法。
查看>>
一台机子同时启动两个相同版本的tomcat
查看>>
剑指offer——python【第29题】最小的K个数
查看>>
带你入门代理模式/SpringAop的运行机制
查看>>
参考的博客
查看>>
移动端适配方案
查看>>
eclipse对离线python的环境搭建
查看>>
要找工作啦
查看>>
JSON for java入门总结
查看>>
OpenCV imshow无法显示图片
查看>>
js线程&定时器
查看>>
路漫漫其修远兮
查看>>
java.lang.IllegalStateException: getOutputStream() has already been cal
查看>>
作业一
查看>>
LearnMenu
查看>>