歡迎關注微信公衆號:FSA全棧行動 👋java
橋接模式是一種結構型模式,將抽象部分與實現部分分離,使它們均可以獨立的變化,通俗來講,是經過組合來橋接其它的行爲/維度。數據庫
補充:橋接模式用於設計的前期,精細化的設計,讓系統更加靈活編程
在編碼以前,先舉個例子,手機有很規格,好比品牌、內存、機身顏色等等,那麼在設計數據庫表的時候,絕對不可能在 phone 表中用字段直接描述以上規格,就好比機身顏色來講,除了有常見的紅綠藍等顏色,還有相似 「亮黑」、「晴雪」、「墨羽」 等自定義的顏色,而且後期還可能重命名,可想而知,在 Phone 表中用一個字段來描述顏色維護性是有多差,更別說內存了(內存還分品牌、容量、帶寬...),這時把就得考慮把顏色單獨放一張 Color 表,兩表之間經過 外鍵關聯,之後無論是增長或重命名顏色,都很靈活。微信
表與表之間經過 外鍵關聯(通常是 Int 類型) 就是一種橋接模式,那麼在實際編碼中,通常是經過 組合 的方式實現這種橋接關係,即在 Phone 類中持有 Color 對象。另外,由於對象除了能夠描述屬性,還能夠有行爲方法,因此說,橋接模式能夠橋接其它的行爲/維度。markdown
建立 顏色接口,以及 具體顏色類:ide
/** * 顏色接口 * * @author GitLqr */
public interface IColor {
String getColor();
}
public class BlueColor implements IColor {
@Override
public String getColor() {
return "藍色";
}
}
public class RedColor implements IColor {
@Override
public String getColor() {
return "紅色";
}
}
複製代碼
建立抽象角色手機類,持有 Color 對象:oop
/** * 抽象角色:手機 * * @author GitLqr */
public abstract class Phone {
/** * 經過組合的方式來橋接其餘行爲 */
protected IColor color;
public void setColor(IColor color) {
this.color = color;
}
/** * 手機的方法 */
public abstract void run();
}
複製代碼
建立具體角色手機類:this
/** * 手機實例:小米手機 * * @author GitLqr */
public class MiPhone extends Phone {
public MiPhone(IColor color) {
this.setColor(color);
}
@Override
public void run() {
System.out.println(color.getColor() + "小米手機運行中...");
}
}
/** * 手機實例:蘋果手機 * * @author GitLqr */
public class IPhone extends Phone {
public IPhone(IColor color) {
this.setColor(color);
}
@Override
public void run() {
System.out.println(color.getColor() + "蘋果手機運行中...");
}
}
複製代碼
使用:編碼
public static void main(String[] args) {
Phone miPhone = new MiPhone(new BlueColor());
miPhone.run(); // 藍色小米手機運行中...
Phone iPhone = new IPhone(new RedColor());
iPhone.run(); // 紅色蘋果手機運行中...
}
複製代碼
若是文章對您有所幫助, 請不吝點擊關注一下個人微信公衆號:FSA全棧行動, 這將是對我最大的激勵. 公衆號不只有Android技術, 還有iOS, Python等文章, 可能有你想要了解的技能知識點哦~spa