設計模式--橋接模式
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL00ERPNzYU9EeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2cTNzETMxcTM0ATMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
基本介紹
- 橋接模式(Bridge模式)是指:将實作與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變
- 是一種結構型設計模式
- Bridge模式給予類的最小設計原則,通過使用封裝、聚合及繼承等行為讓不同等類承擔不同等職責。它等主要特點是把抽象(Abstraction)與行為實作(Implementation)分離,進而可以保持各部分等獨立性以及應對他們等功能擴充
手機操作問題
現在對不同的手機類型的不同品牌實作操作程式設計(比如:開機、上網、打電話)
建立品牌接口
public interface Brand {
void open();
void close();
void call();
}
實作類 小米手機
public class Xiaomi implements Brand {
@Override
public void open() {
System.out.println("小米手機開機");
}
@Override
public void close() {
System.out.println("小米手機關機");
}
@Override
public void call() {
System.out.println("小米手機打電話");
}
}
實作類 VIVO手機
public class Vivo implements Brand{
@Override
public void open() {
System.out.println("vivo手機開機");
}
@Override
public void close() {
System.out.println("vivo手機關機");
}
@Override
public void call() {
System.out.println("vivo手機打電話");
}
}
建立手機抽象類
public abstract class Phone {
//組合品牌
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
protected void open(){
this.brand.open();
}
protected void close(){
this.brand.close();
}
protected void call(){
this.brand.call();
}
}
建立折疊式手機類
public class FoldedPhone extends Phone{
public FoldedPhone(Brand brand) {
super(brand);
}
public void open(){
super.open();
System.out.println(" 折疊式手機 ");
}
public void close(){
super.close();
System.out.println(" 折疊式手機 ");
}
public void call(){
super.call();
System.out.println(" 折疊式手機 ");
}
}
測試
public class Client {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new Xiaomi());
phone.open();
phone.call();
Phone phone2 = new FoldedPhone(new Vivo());
phone2.open();
phone2.call();
}
}
當我們新增品牌 或者手機類型當時候 隻需要增加一個類 就好
增加直立式手機
public class UpRightPhone extends Phone {
public UpRightPhone(Brand brand) {
super(brand);
}
public void open(){
super.open();
System.out.println(" 直立式手機 ");
}
public void close(){
super.close();
System.out.println(" 直立式手機 ");
}
public void call(){
super.call();
System.out.println(" 直立式手機 ");
}
}
public class Client {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new Xiaomi());
phone.open();
phone.call();
System.out.println("-=============================-");
Phone phone2 = new UpRightPhone(new Vivo());
phone2.open();
phone2.call();
}
}
- 在JDBC源碼中就使用類橋接模式
個人部落格:
http://blog.yanxiaolong.cn/