栗子
定义抽象公司
<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>
总结
桥梁模式,抽象和实现解耦,需要的时候,将实现注入抽象。