JAVA設計模式-橋接模式
一、介紹
橋接模式是一種結構型模式,它主要是將抽象部分和實作部分進行分離,可以獨立變化,降低類與類之間的耦合度,
舉例:我們現在需要實作不同形狀,每個形狀還要有不同的顏色,我們傳統方式是定義一個形狀類,再定義每一個不同的形狀實作類,繼承上面的形狀類,這是形狀的需求已經完成,接下來我們實作不同形狀不同顏色的需求,我們需要再定義形狀顏色類,繼承上面的形狀,每個形狀顏色類定義不同的顏色,此時我們會發現擴展會非常麻煩并且層次非常多,這時我們可以使用橋接模式,將形狀和顏色的抽象、實作分離開來,

二、參與者
- 抽象類(Abstraction): 里面包含了一個實作類介面的參考,兩者是聚合關系,
- 擴充抽象類(RefinedAbstraction): 是抽象類的子類,實作父類中的方法,
- 實作類介面(Implementor): 定義基本操作,抽象類是定義了基于基本操作的較高層次的操作,
- 具體實作類(ConcreteImplementor): 實作Implementor介面,并定義具體的實作操作,
- 客戶端(Client): 呼叫者
三、類圖

四、具體實作
Abstraction類
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 抽象類
* @Author: xpy
* @Date: Created in 2022年10月18日 10:54 下午
*/
public abstract class Shape {
Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw();
}
RefinedAbstraction類
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 長方形
* @Author: xpy
* @Date: Created in 2022年10月18日 10:57 下午
*/
public class Rectangle extends Shape{
@Override
public void draw() {
color.paint("長方形");
}
}
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 圓形
* @Author: xpy
* @Date: Created in 2022年10月18日 10:57 下午
*/
public class Circular extends Shape{
@Override
public void draw() {
color.paint("圓形");
}
}
Implementor類
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 實作類介面
* @Author: xpy
* @Date: Created in 2022年10月18日 10:54 下午
*/
public interface Color {
void paint(String shape);
}
ConcreteImplementor類
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 紅色
* @Author: xpy
* @Date: Created in 2022年10月18日 10:59 下午
*/
public class RedColor implements Color{
public void paint(String shape) {
System.out.println("紅色的" + shape);
}
}
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 黃色
* @Author: xpy
* @Date: Created in 2022年10月18日 10:59 下午
*/
public class YellowColor implements Color{
public void paint(String shape) {
System.out.println("黃色的" + shape);
}
}
Client類
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.bridging
* @Description: 客戶端
* @Author: xpy
* @Date: Created in 2022年10月18日 11:00 下午
*/
public class Client {
public static void main(String[] args) {
RedColor redColor = new RedColor();
YellowColor yellowColor = new YellowColor();
Shape shape = new Rectangle();
shape.setColor(redColor);
shape.draw();
shape.setColor(yellowColor);
shape.draw();
shape = new Circular();
shape.setColor(redColor);
shape.draw();
shape.setColor(yellowColor);
shape.draw();
}
}
總結
優點:
- 抽象和實作進行了分離,降低了耦合度
- 提高了可擴展性
缺點:
- 增加了系統的理解和設計的難度,對開發者要求提高,
- 需要對需求可以正確分辨出兩個獨立變化的維度,不是所有需求都可以適用,有局限性,
原文鏈接:https://monkey.blog.xpyvip.top/archives/java-she-ji-mo-shi---qiao-jie-mo-shi
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519235.html
標籤:Java
