1類圖
2定義
將抽象部分與實現部分分離,使他們都可以獨立地進行變化。
3應用場景
3.1 如果一個系統需要在構建的抽象化角色和具體化角色之間增加更多的靈活性,避免這兩個層次之間建立靜態的繼承聯繫,可以通過橋接模式使它們在抽象層建立一個關聯關係。
通用模板
4實現部分的抽象接口
public interface Implementor {
public void operationImpl();
}
5實現部分具體的實現一
public class ConcreteImplementorA implements Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA");
}
}
6實現部分具體的實現二
public class ConcreteImplementorB implements Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB");
}
}
7抽象部分實現
public abstract class Abstraction {
private Implementor mImplementor;
public Abstraction(Implementor implementor) {
mImplementor = implementor;
}
public void operation(){
mImplementor.operationImpl();
}
}
8抽象部分的子類
public class RefinedAbstraction extends Abstraction {
private Implementor mImplementor;
public RefinedAbstraction(Implementor implementor) {
super(implementor);
mImplementor = implementor;
}
public void refinedOperation(){
System.out.println("RefinedAbstraction ");
mImplementor.operationImpl();
}
}
9客戶類
public class Client {
public static void main(String[] args) {
Implementor implementorA = new ConcreteImplementorA();
Implementor implementorB = new ConcreteImplementorB();
RefinedAbstraction refinedA = new RefinedAbstraction(implementorA);
refinedA.refinedOperation();
System.out.println("---------------------");
RefinedAbstraction refinedB = new RefinedAbstraction(implementorB);
refinedB.refinedOperation();
}
}
簡單實現
10咖啡類
public abstract class Coffee {
protected CoffeeAdditives impl;
public Coffee(CoffeeAdditives impl) {
this.impl = impl;
}
public abstract void makeCoffee();
}
11大杯
public class LargeCoffee extends Coffee {
public LargeCoffee(CoffeeAdditives impl) {
super(impl);
}
@Override
public void makeCoffee() {
System.out.println("大杯的" + impl.addSomething() + "咖啡");
}
}
12中杯
public class MiddleCoffee extends Coffee {
public MiddleCoffee(CoffeeAdditives impl) {
super(impl);
}
@Override
public void makeCoffee() {
System.out.println("中杯的" + impl.addSomething() + "咖啡");
}
}
13小杯
public class SmallCoffee extends Coffee {
public SmallCoffee(CoffeeAdditives impl) {
super(impl);
}
@Override
public void makeCoffee() {
System.out.println("小杯的" + impl.addSomething() + "咖啡");
}
}
14不同味的咖啡抽象類
public abstract class CoffeeAdditives {
public abstract String addSomething();
}
15加糖
public class Sugar extends CoffeeAdditives {
@Override
public String addSomething() {
return "加糖";
}
}
16原味
public class Ordinary extends CoffeeAdditives {
@Override
public String addSomething() {
return "原味";
}
}
17測試類
public class Test {
public static void main(String[] args) {
Ordinary implOrdinary = new Ordinary();
Sugar implSuhar = new Sugar();
LargeCoffee largeCoffeeOrdinary = new LargeCoffee(implOrdinary);
largeCoffeeOrdinary.makeCoffee();
LargeCoffee largeCoffeeSuhar = new LargeCoffee(implSuhar);
largeCoffeeSuhar.makeCoffee();
System.out.println("-----------------------------------");
SmallCoffee smallCoffeeOrdinary = new SmallCoffee(implOrdinary);
smallCoffeeOrdinary.makeCoffee();
SmallCoffee smallCoffeeSuhar = new SmallCoffee(implSuhar);
smallCoffeeSuhar.makeCoffee();
System.out.println("-----------------------------------");
MiddleCoffee middleCoffeeOrdinary = new MiddleCoffee(implOrdinary);
middleCoffeeOrdinary.makeCoffee();
MiddleCoffee middleCoffeeSuhar = new MiddleCoffee(implSuhar);
middleCoffeeOrdinary.makeCoffee();
}
}