栗子
定義抽象公司
<code>public abstract class Corp{ // 公司生産内容 protected abstract void produce(); // 銷售 protected abstract void sell(); // 賺錢 public void makeMoney(){ // 生産 this.produce(); // 銷售 this.sell(); } }</code>
上方是模闆方法
下面是房地産公司
<code>public class HouseCorp extends Corp{ // 蓋房子 protected void produce(){ // 蓋房子 } // 賣房子 protected void sell(){ // 賣房子 } // 賺錢 public void makeMoney(){ super.makeMoney(); // 賺錢 } }</code>
服裝公司
<code>public class ClothesCorp extends Corp{ // 生産衣服 protected void produce(){ // 生産衣服 } protected void sell(){ // 出售衣服 } public void makeMoney(){ super.makeMoney(); // 賺錢 } }</code>
最後編寫場景
<code>public class Client{ public static void main(String[] args){ HouseCorp houseCorp = new HouseCorp(); houseCorp.makeMoney(); ClothesCorp clothesCorp = new ClothesCorp(); clothesCorp.makeMoney(); } }</code>
更改
企業改頭換面,生産另外的産品
山寨公司
<code>public class IPodCorp extends Corp{ // 生産 protected void produce(){ // 生産 } // 暢銷 protected void sell(){ // 暢銷 } // 賺錢 public void makeMoney(){ super.makeMoney(); // 賺錢 } }</code>
賺錢
<code>public class Client{ public static void main(String[] args){ // 房地産 HouseCorp houseCorp = new HouseCorp(); // 掙錢 houseCorp.makeMoney(); // 山寨公司 IPodCorp ipodCorp = new IPodCorp(); ipodCorp.makeMoney(); } }</code>
繼續更改
公司和産品分離,讓其之間建立關系
<code>// 抽象産品類public abstract class Product{ // 生産 public abstract void beProducted(); // 銷售 public abstract void beSelled(); }</code>
<code>// 房子public class House extends Product{ // 豆腐渣房子 public void beProducted(){ // 生産 } // 銷售 public void beSelled(){ // 銷售 } }</code>
繼續
<code>public class IPod extends Product{ public void beProducted(){ // 生産 } public void beSelled(){ // 銷售 } }</code>
下面是抽象公司類
<code>public abstract class Corp{ // 定義抽象産品對象 private Product product; // 構造函數 public Corp(Product product){ this.product = product; } // 公司賺錢 public void makeMoney(){ // 生産 this.product.beProducted(); // 銷售 this.product.beSelled(); } }</code>
定義房地産公司
<code>public class HouseCorp extends Corp{ // 定義House産品 public HouseCorp(House house){ super(house); } // 賺錢 public void makeMoney(){ super.makeMoney(); // 賺錢 } }</code>
<code>public class ShanZhaiCorp extends Corp{ // 産品 public ShanZhaiCorp(Product product){ super(product); } // 賺錢 public void makeMoney(){ super.makeMoney(); // 賺錢 } }</code>
最後書寫場景
<code>public class Client{ public static void main(String[] args){ House house = new House(); // 房地産公司 HouseCorp houseCorp = new HouseCorp(house); // 賺錢 houseCorp.makeMoney(); // 生産産品 ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new IPod()); ShanZhaiCorp.makeMoney(); } }</code>
此時在目前狀态下,若要生産服裝,隻需要繼承Product類,定義一個服裝類即可
<code>public class Clothes extends Product{ public void beProducted(){ // 生産服裝 } public void beSelled(){ // 賣衣服 } }</code>
最後書寫場景類
<code>public class Client{ public static void main(String[] args){ House house = new House(); // 房地産公司 HouseCorp houseCorp = new HouseCorp(house); // 掙錢 houseCorp.makeMoney(); // 山寨公司生産 ShanZhaiCorp.shanZhaiCorp = new ShanZhaiCorp(new Clothes()); ShanZhai.makeMoney(); } }</code>
總結
橋梁模式,抽象和實作解耦,需要的時候,将實作注入抽象。