本篇文章為大家帶來了關於java的相關知識,其中主要介紹了橋接模式的相關問題,橋接模式將抽象與實現分離,使它們可以獨立變化,降低了抽象和實現這兩個可變維度的耦合度,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
其實在現實生活中,有很多類別可以有兩個或更多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m 種形狀和n 種顏色的圖形就有m*n 種,不但對應的子類很多,而且擴展比較困難。
例如不同顏色和字體的文字、不同品牌和功率的汽車、不同性別和職業的男女、支援不同平台和不同檔案格式的媒體播放器等。如果用橋接模式就能很好地解決這些問題。
將抽象與實作分離,使它們可以獨立變更。它是用組合關係代替繼承關係來實現,從而降低了抽象化和實現這兩個可變維度的耦合度
模式類型:結構設計模式
原理類別圖:
原理類別圖表說明:
優點:
缺點:
結構圖:
#該結構圖的實作程式碼:
實視化角色:
/** * 实视化角色 */public interface Implemntor { public void OperationImpl();}
具體實作角色:
/** * 具体实现化角色 */public class ConcreteImplementorA implements Implemntor{ @Override public void OperationImpl() { System.out.println("具体实现化角色被访问"); }}
抽象角色:##/**
* 抽象化角色
*/public abstract class Abstraction {
protected Implemntor implemntor;
protected Abstraction(Implemntor implemntor){
this.implemntor = implemntor;
}
public abstract void Operation();}
/**
* 扩展抽象化角色
*/public class RefinedAbstraction extends Abstraction{
protected RefinedAbstraction(Implemntor implemntor) {
super(implemntor);
}
public void Operation(){
System.out.println("扩展抽象化角色被访问");
implemntor.OperationImpl();
}}
public class Test {
public static void main(String[] args) {
Implemntor implemntor = new ConcreteImplementorA();
Abstraction abs = new RefinedAbstraction(implemntor);
abs.Operation();
}}
扩展抽象化角色被访问
具体实现化角色被访问
交通工具在路上行駛,這裡有兩個維度的變化,
交通工具的類型不同,路也分水泥路和柏油路
類圖:/**
* 交通工具类
*/public interface Vehicle {
public void drive();}
# /**
* 具体的交通工具:小汽车
*/public class Car implements Vehicle{
@Override
public void drive() {
System.out.println("小汽车");
}}
/**
* 具体的交通工具:大巴车
*/public class Bus implements Vehicle{
@Override
public void drive() {
System.out.println("大巴车");
}}
/**
* 抽象的路
*/public abstract class Road {
protected Vehicle vehicle;
public Road(Vehicle vehicle){
this.vehicle = vehicle;
}
public abstract void driveOnRoad();}
/**
* 具体的路:油柏路
*/public class UnpavedRoad extends Road{
public UnpavedRoad(Vehicle vehicle) {
super(vehicle);
}
@Override
public void driveOnRoad() {
super.vehicle.drive();
System.out.println("行驶在油柏路");
}}
/**
* 具体的路:水泥路
*/public class CementRoad extends Road{
public CementRoad(Vehicle vehicle) {
super(vehicle);
}
@Override
public void driveOnRoad() {
super.vehicle.drive();
System.out.println("行驶在水泥路");
}}
//测试public class Test {
public static void main(String[] args) {
Road roadCar = new CementRoad(new Car());
roadCar.driveOnRoad();
Road roadBus = new CementRoad(new Bus());
roadBus.driveOnRoad();
}}
对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用. 推荐学习:《java视频教程》小汽车
行驶在水泥路
大巴车
行驶在水泥路
5、桥接模式的注意事项
6、桥接模式应用场景
以上是詳細介紹Java橋接模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!