Java设计模式概述之结构型模式(桥接模式)
2017-02-07 21:49
211 查看
七、桥接模式
概念
小插曲
将抽象与具体分离就是桥接模式。我勒个去,GOF里面的这一句想必很难理解。这句话的确很抽象,但我们仔细琢磨琢磨,还是会柳暗花明的。桥接模式的“桥”字,说实话我也不明白为什么要以“桥接”来命名这一模式,所以先请大家把“桥接模式”抽象地看作“**模式”,不再为名字而迷惑。解释
在Java中,“抽象”大概可以指interface,abstract class,因此,大家暂时把“抽象”理解为interface、abstract class。“具体”大概可以指实现interface的类、继承abstract class的类,大家也暂时吧“具体”理解为这样。(Tips:抽象与具体是相对的,不是绝对的。)。大家还记得Java中的多态性吗?引用变量的类型可以是实例对象的父类及接口,那么在桥接模式中:“将抽象与具体分离”,这句话要的是抽象,也就是桥接模式要的就是抽象,而不是具体。抽象的接口、抽象的类,都可以有多个实现类及子类。大家应该都知道,抽象类、接口都是用来扩展程序功能的,因此“抽象”具有扩展性,而桥接模式就是为了增强程序的扩展性,并且很好的遵循了Java设计原则的开闭原则:对扩展开放,对修改关闭。我相信朋友们阅读到这里可能也是云里雾里的,下面给大家举个例子,让大家好理解。实例
先提出一个需求:现在需要用一个检测器来分辨出不同手机。不使用桥接模式
class Detector{ public void judge_iPhone(iPhone iphone){ iphone.show(); } public void judge_Galaxy(Galaxy galaxy){ galaxy.show(); } } class iPhone{ public void show(){ System.out.println("iOS System"); } } class Galaxy{ public void show(){ System.out.println("Android System"); } }
Detector为检测器类。iPhone、Galaxy为被检测类,有属于自己的成员方法show。当我们在使用时,必须分清到底是iPhone、还是Galaxy类。这样做有一定的局限性:若再来一个Nokia类,我们不但要写定义Nokia类的代码,还要在Detector类中增加有关Nokia的检测方法,这样就违背了开闭原则,代码量也会增多。
使用了桥接模式
class Detector{ public void judge(Phone phone){ phone.show(); } } class iPhone implements Phone{ public void show(){ System.out.println("iOS System"); } } class Galaxy implements Phone{ public void show(){ System.out.println("Android System"); } } interface Phone{ void show(); }
定义了一个接口Phone,接口中定义了一个show抽象方法,同时让iPhone、Galaxy实现Phone接口及接口的方法。将Detector中的方法修改为单一的judge(Phone phone)方法。这样judge方法就由之前的具体化转变为抽象化。只要传入参数实现了Phone接口,就可以执行。这样既提高了代码的可扩展性也降低了各个类之间的耦合度。
相关文章推荐
- Java设计模式概述之结构型模式(代理模式)
- Java设计模式概述之结构型模式(外观模式)
- JAVA基础10 设计模式:结构型模式(适配器 代理模式 桥接模式 享元模式 组合模式 装饰器模式)
- Java设计模式概述之结构型模式(享元模式)
- Java设计模式概述之结构型模式(装饰器模式)
- Java设计模式 - Bridge(桥接模式)
- java设计模式(结构型)之装饰模式
- 设计模式(十二)—桥接模式(结构型)
- Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别
- JAVA基础笔记(复习)-单列设计模式 - 概述与体现
- java设计模式(结构型)之组合模式
- 设计模式-结构型02-桥接模式
- java设计模式--单例模式--概述01
- 一起学java设计模式--适配器模式(结构型模式)
- Java开发中的23个设计模式--第二部分:结构型模式
- java设计模式(结构型)之桥接模式
- java设计模式总结篇--结构型模式
- Java开发中的23种设计模式概述
- 类模式Java设计模式之十五(桥接模式)类模式
- Java开发中的23种设计模式之十:桥接模式(Bridge)