zoukankan      html  css  js  c++  java
  • 设计模式之桥接模式(Java语言描述)

    桥接模式定义


    將抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

    Decouple an abstraction from its implementation so that the two can vary independently.

    单从定义来看,读者未必能够真正理解桥接模式的含义,假设我们有这样的应用场景,在一个CAD系统中我们需要绘制矩形、圆形、长方形三种图形,同时绘制的图形需要有蓝色、红色、绿色三种版本,此时我们至少有两种设计方案:

    1.为每一种形状各自提供一套不同颜色的版本。

    2.根据实际需要对图形和颜色进行任意组合。

    两种设计方案对比:
    第一种方案需要9个类,而且每增加一个颜色或图形系统中都要增加多个类。
    第二种只需要6个类,且每增加一个一个形状或颜色只增加一个类。

    像这种有两个维度的情况采用方案二进行设计,能够减少系统中类的个数,且系统扩展更为方便。设计方案二就是传说中的桥接模式的应用。桥接模式將继承关系转换为聚合关系,从而降低了类之间的耦合度。

    桥接模式结构


    桥接模式结构如下图所示:
    桥接模式包含如下几个角色:
    • Abstraction:抽象类
    • RefinedAbstraction:扩充抽象类
    • Implementor:实现类接口
    • ConcreteImplementor:具体实现类

    源代码

    实现类接口Implementor:
    public interface Implementor {
    	void operationImpl();
    }
    
    实现类ConcreteImplementorA:
    public class ConcreteImplementorA implements Implementor{
    
    	@Override
    	public void operationImpl() {
    		System.out.println("ConcreteImplementorA operationImpl");
    	}
    
    }
    实现类ConcreteImplementorB:
    public class ConcreteImplementorB implements Implementor{
    
    	@Override
    	public void operationImpl() {
    		System.out.println("ConcreteImplementorB operationImpl");
    	}
    
    }
    抽象类Abstraction:
    public class ConcreteImplementorB implements Implementor{
    
    	@Override
    	public void operationImpl() {
    		System.out.println("ConcreteImplementorB operationImpl");
    	}
    
    }
    扩充抽象类RefinedAbstraction代码:
    public class RefinedAbstraction extends Abstraction{
    
    	@Override
    	public void operation() {
    		this.getImpl().operationImpl();
    	}
    
    }
    
    客户端Client:
    public class Client {
    
    	public static void main(String[] args) {
    		Abstraction abs = new RefinedAbstraction();
    		//具体实现交给客户端选择
    		Implementor impl = new ConcreteImplementorB();
    		abs.setImpl(impl);
    		abs.operation();
    	}
    }
    

    桥接模式的核心思想就是变继承关系为聚合关系,再回到绘制不同颜色图形的例子,使用桥接模式设计类图如下,具体的颜色由客户端进行选择。






  • 相关阅读:
    LVS负载均衡
    Firewalld防火墙
    前端性能优化----yahoo前端性能团队总结的35条黄金定律
    如何做好工作?
    需求分析的故事——如何练就需求分析的火眼金晴?
    让技术人员看得懂的流程-----面向对象设计全流程概述
    关于RESTFul初步理解
    初步研究全文搜索的解决方案
    Artech的MVC4框架学习——第八章View的呈现
    Artech的MVC4框架学习——第七章Action的执行
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468481.html
Copyright © 2011-2022 走看看