Net设计模式实例之桥接模式( Bridge Pattern)(1)

简介:

一、桥接模式简介(Brief Introduction

桥接模式( Bridge Pattern ),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。
Decouple an abstraction from its implementation so that the two can vary independently.
什么是聚合 / 组合:
聚合 (Aggregation) ,当对象 A 被加入到对象 B 中,成为对象 B 的组成部分时,对象 B 和对象 A 之间为聚合关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
场景:商品和他的规格、样式就是聚合关系。
类与类的聚合关系图
 
 
组合( Composite ,对象 A 包含对象 B ,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
场景:  Window 窗体由滑动条 slider 、头部 Header  和工作区 Panel 组合而成。
类与类的组合关系图
聚合与合成原则 :尽量使用聚合或者组合,尽量不使用类继承。
对象的继承关系是在编译时就定义好的,所以无法在运行时改变从父类继承的实现   。子类的实现与它的父类有着非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当需要复用子类时,如果集成下来的实现不符合解决新的问题,则父类必然重写或被其他更合适的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

二、解决的问题(What To Solve

        当系统有多维角度分类时,而每一种分类又有可能变化,这时考虑使用桥接模式比较合适。

三、桥接模式分析(Analysis

1、桥接模式结构

 
Abstraction :业务抽象类,定义一个抽象接口,维护对 Impementor 的引用 .
RefinedAbstraction :具体实现类,被提炼的抽象
Implementor :定义一个抽象实现类,此抽象类与 Abstraction 类不一定完全相同。 Implementor 类提供了一些原始的操作,而 Abstraction 类是对这些原始操作一个更高层次的封装 .
ConcreteImplementorA ConcreteImplementorA :具体实现

2、代码

1 业务抽象类 Abstraction 及其提炼出的具体实现类RefinedAbstraction
public  abstract class Abstraction
{
    protected Implementor  _implementor;
 
    public Implementor  Implementor
     {
        set  { _implementor = value ; }
        get  { return  _implementor; }
     }
 
    public virtual void  Operation()
     {
         _implementor.OperationImp();
     }
}
 
public  class RefinedAbstraction :Abstraction
{
    public override void  Operation()
     {
         _implementor.OperationImp();
     }
}
 
2 、抽象实现类 Implementor  及其具体实现类ConcreteImplementorA
ConcreteImplementorB
public  abstract class Implementor
{
    public abstract void  OperationImp();
}
 
public  class ConcreteImplementorA :Implementor
{
    public override void  OperationImp()
     {
        Console .WriteLine("{0} Operation Method" ,this .GetType().Name);
     }
}
 
public  class ConcreteImplementorB :Implementor
{
    public override void  OperationImp()
     {
        Console .WriteLine("{0} Operation Method" this .GetType().Name);
     }
}
 
2 、客户端代码
static  void Main (string [] args)
{
    Abstraction  a1 = new RefinedAbstraction ();
 
    // Set implementation and call
     a1.Implementor = new ConcreteImplementorA ();
     a1.Operation();
 
    // Change implemention and call
     a1.Implementor = new ConcreteImplementorB ();
     a1.Operation();
 
    Console .ReadKey();
}

3、实例运行结果










本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/265768,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
64 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
4月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
50 1
|
3月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
4月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
4月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
65 0
|
4月前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
38 1
|
1天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
27天前
|
设计模式
设计模式-单一职责模式
设计模式-单一职责模式
|
27天前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)