1. 程式人生 > >java常用設計模式九:橋接模式

java常用設計模式九:橋接模式

this 橋接 abstract pub image sys cli 分享圖片 有一個

一、概述

將抽象部分與它的實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式。比如存在2個維度,第一個維度有一個抽象類A和對應的子類A1和A2;第二個維度有另一個接口B和對應的子類B1和B2;接口A依賴接口B。

所謂的獨立變化就是當我們修改A1和A2或是修改B1和B2對方都不用修改。這種抽象依賴就像橋接

二、示例

技術分享圖片

比如上圖所示:動物(抽象類)路(接口),動物有狗(具體類)貓(具體類),路有大路(具體類)小路(具體類),要實現的就是 “什麽動物在什麽路走路”,這就是一個2維度組合,而且2個維度都可以進行獨立變化。

1)動物接口

public
interface 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常用設計模式九:橋接模式