java常用設計模式九:橋接模式
阿新 • • 發佈:2019-01-11
this 橋接 abstract pub image sys cli 分享圖片 有一個
一、概述
將抽象部分與它的實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式。比如存在2個維度,第一個維度有一個抽象類A和對應的子類A1和A2;第二個維度有另一個接口B和對應的子類B1和B2;接口A依賴接口B。
所謂的獨立變化就是當我們修改A1和A2或是修改B1和B2對方都不用修改。這種抽象依賴就像橋接。
二、示例
比如上圖所示:動物(抽象類)走路(接口),動物有狗(具體類)和貓(具體類),路有大路(具體類)和小路(具體類),要實現的就是 “什麽動物在什麽路走路”,這就是一個2維度組合,而且2個維度都可以進行獨立變化。
1)動物接口
publicinterface Animal { void walk(); }
2)動物實現類
public class Dog implements Animal { public void walk() { System.out.println("狗走路"); } }
public class Cat implements Animal { public void walk() { System.out.println("貓走路"); } }
3)路抽象類
public abstract class Road {protected Animal animal; public Road(Animal animal){ this.animal = animal; } public abstract void place(); }
4)路的實現類
public class BigRoad extends Road { public BigRoad(Animal animal) { super(animal); } public void place() { System.out.println("在大路上"); animal.walk(); } }
5)測試類
public class Client { public static void main(String[] args){ Animal dog = new Dog(); Animal cat = new Cat(); Road road1= new BigRoad(dog); Road road2= new SmallRoad(cat); Road road3= new SmallRoad(dog); Road road4= new SmallRoad(cat); road1.place(); road2.place(); road3.place(); road4.place(); } }
在大路上
狗走路
在小路上
貓走路
在小路上
狗走路
在小路上
貓走路
細心的人會發現:橋接模式與抽象工廠模式很相似,都是2個維度上的變化。但是有以下區別:
- 橋接模式屬於結構型模式,不是以創建對象的為目的,一般對象的創建是交給Client類去new 一個對象,對象已經存在後,怎麽來組合使用這些對象;
- 抽象工廠模式屬於創建型模式,以創建對象為目的,一般會在工廠類內部提供new 一個對象的方法。
java常用設計模式九:橋接模式