• 公用技术——设计模式7——结构型模式——桥接模式


    1、问题

      桥接模式是将抽象与具体实现进行解耦。它的目的是:

    1. 当A类依赖于B类时,可以依赖B类的抽象,而不是具体类,从而使得A类和B类可以拥有独立的类体系结构,彼此的变化对双方不存在任何影响。
    2. 当A类依赖与B类时,B类的具体类型延期到runtime,而不是编译阶段。A类对B类的依赖也可以随意切换到其任意的实现类。

      抽象与具体的关系可以理解为对象与对象之间的泛化和实现关系。泛化关系在表现为子类与父类之间的关系。实现表现为接口和实现类之间的关系。

      它的核心思想是”解耦”。

    2、UML图

    为了便于理解,将A类抽象为Person类,B类抽象为Clothes类。

     

    示例中Person类依赖于Clothes(类),以属性的方式注入依赖关系,属性的具体类型延期到运行阶段才可以知晓。

    由于Person依赖于Clothes类,而不是依赖于其具体的子类,所以二者的类体系结构可以独立变化,在本例中Person通过性别划分为男女,衣服类通过季节划分为夏装和冬装,当添加秋装,一种新的服装类型时,Person类不受任何影响。

    3、代码

    Person类

    /**
     * 
     * @File Name: Person.java
     * @Description: Person类,人的抽象
     * @version 1.0
     * @since JDK 1.8
     */
    public class Person {
    	// 人可以有多套衣服,这个属性代表人穿在身上的那套衣服
    	private Clothes wearClothes;
    
    	public Person() {
    
    	}
    
    	public Person(Clothes clothes) {
    
    	}
    	// set和get省略
    }
    

      Male类和Female类继承Person类,此处省略。

      Clothes类,它由上衣,裤子,鞋子三部分组成,类之间存在聚合关系

    /**
     * 
     * @File Name: Clothes.java 
     * @Description: 衣服
     * @version 1.0
     * @since JDK 1.8
     */
    public class Clothes {
    	// 外套
    	private Coat coat;
    	// 裤子
    	private Pants pant;
    	// 鞋子
    	private Shoes shoes;
    	// setter和getter,略
    }

      SummerClothes和WinterClothes直接继承Clothes类即可。此处省略

    4、讨论

      1.   问题1:适配器的主要功能是什么?

      答:适配器的主要功能是对依赖关系的解耦。从上述的示例中可以看到Person类与Clothes之间的变化是独立的,一方的变化不会对另外一方产生影响。

      2.   问题2:适配器的应用场景?

      答:适配器模式更偏向于一种思想,它是为了解决”解耦”问题而诞生的,而类与类之间存在耦合的情况随处可见。解决它的方式也是依赖抽象,而不是具体类型。可以说这种模式或这种思想在Java编程语言中随处可见。

    5、示例

      任何注入依赖的Java代码,通过依赖其抽象,而不是具体实现都可以适为本模式的示例。例如最常见的Controller依赖Service。

  • 相关阅读:
    Sencha Touch 使用笔记
    区数据
    省市 数据
    js校验身份证
    js 邮政编码验证
    原生js添加class
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    js学习笔记 Function类型属性的理解
    js学习笔记 理解原型对象
    js学习笔记 chapter5 引用类型
  • 原文地址:https://www.cnblogs.com/rain144576/p/9940908.html
Copyright © 2020-2023  润新知