一、前言
今天我們來學習java設計模式中的橋接模式,橋接模式是一種應用比較廣泛的一種設計模式,這種設計模式將抽象與實現獨立出來,使得我們的實現可以獨立的變化。橋接模式是一種處理多維度變化的設計模式,最終達到多維度之間的解耦效果。比如說我們的畫筆和紙就是一種多維度的關係,不同的畫筆可以在不同的紙張上作畫,通俗一點來說就是多對多的一種維度關係。橋接模式就是處理這種多維度關係的一種方式。
二、橋接模式
橋接模式的原理:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。具體的可以這樣描述:橋接模式就像是一個通道,將多個不同的接口連接起來,橋接模式只操作接口,這樣子就可以達到將多維度的抽象部分進行管理,而實現部分就可以獨立變化的效果。橋接模式這種巧妙的處理方式將多個維度的繼承結構獨立出來,使得它們之間的變化互不影響。這種方式使得系統更加靈活,更容易擴展。所以橋接模式是一種我們非常值得學習的一種設計模式。
三.、代碼展示
代碼展示中,使用了畫筆和紙的例子,我們將筆和紙這兩個維度都抽取成兩個接口,然後使用橋接的方式來管理這兩個接口的關係,使筆和紙進行橋接。
3.1 接口
public interface Paper {
void usedPaperType();
}
/**
* 抽取一個畫的行爲
* * 這裏將筆和紙進行橋接
* 兩個維度都是抽象的,不同維度可以有不同的實現
* 這樣子就做到了解耦的效果
* @author Deng
*
*/
public abstract class Pen {
protected Paper paper;
public Pen(Paper paper)
{
this.paper = paper;
}
abstract void draw();
}
3.2 接口實現
public class A4Paper implements Paper {
@Override
public void usedPaperType() {
// TODO Auto-generated method stub
System.out.println("在A4紙上");
}
}
public class XuanPaper implements Paper {
@Override
public void usedPaperType() {
// TODO Auto-generated method stub
System.out.println("在宣紙上");
}
}
public class Pencil extends Pen{
public Pencil(Paper paper) {
super(paper);
// TODO Auto-generated constructor stub
}
@Override
public void draw() {
// TODO Auto-generated method stub
paper.usedPaperType();
System.out.println("用鉛筆畫");
}
}
public class Brush extends Pen{
public Brush(Paper paper) {
super(paper);
// TODO Auto-generated constructor stub
}
@Override
public void draw() {
// TODO Auto-generated method stub
paper.usedPaperType();
System.out.println("用毛筆畫");
}
}
3.4 結果
這種模式設計出來的效果就是我們可以接續擴展不同的筆和不同的紙,兩個維度之間互不影響,使得系統之間的靈活性和擴展性都得到了提高,這是一個非常只得學習的設計模式喲
public class Test {
public static void main(String[] args) {
Paper paper = new XuanPaper();
Pen pen = new Brush(paper);
pen.draw();
Paper paper2 = new A4Paper();
Pen pen2= new Pencil(paper2);
pen2.draw();
}
}
在宣紙上
用毛筆畫
在A4紙上
用鉛筆畫