《您的设计模式》(CBF4LIFE)之“桥梁模式”【整理】
2016-10-27 11:17
513 查看
背景:经营两个公司,生产产品赚钱。
第一步,产品类
package com.teng.pattern.impl;
/**
* 产品抽象类
* <br>创建日期:2016年7月3日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public abstract class Product {
/**
* 被生产
* @since 1.0
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:01:26
*/
public abstract void beProduct();
/**
* 被销售
* @since 1.0
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:01:35
*/
public abstract void beSell();
}
两个实现类:
第二步,公司类
公司实现类:
HouseCorp类和ShanZhaiCorp类的区别是有参构造的参数类型上,HouseCorp类比较明确,我就是只要House类,所以直接定义传递进来的必须是House类。
ShanZhaiCorp就不同了,它是确定不了生产什么类型。
第三步,开始赚钱
package com.teng.pattern.impl;
/**
* <br>创建日期:2016年7月3日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public class Client {
/**
* 主方法
* @since 1.0
* @param args
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:09:04
*/
public static void main(String[] args) {
System.out.println("房地产公司------------------------");
HouseCorp houseCorp = new HouseCorp();
houseCorp.setProduct(new House());
houseCorp.makeMoney();
System.out.println("山寨公司--------------------------");
ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp();
shanZhaiCorp.setProduct(new Ipad());
shanZhaiCorp.makeMoney();
}
}
增加公司,你要么继承Corp类,要么继承HouseCorp或ShanZhaiCorp;
增加产品,继承Product类,或者继承House类,你要把房子分为公寓房、别墅、商业用房等;
你都是在扩展,唯一你要修改的是Client类,你类都增加了哪能不修改调用,也就是说Corp类和Product类都可以自由的扩展,而不会对整个应用产生变更,这就是桥梁模式。
业务抽象角色引用业务实现角色或者说业务抽象角色的部分实现是由业务实现角色完成的。
桥梁模式的优点就是类间解耦,两个角色都可以自己扩展下去,不会相互影响,这个符合OCP原则。
第一步,产品类
package com.teng.pattern.impl;
/**
* 产品抽象类
* <br>创建日期:2016年7月3日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public abstract class Product {
/**
* 被生产
* @since 1.0
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:01:26
*/
public abstract void beProduct();
/**
* 被销售
* @since 1.0
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:01:35
*/
public abstract void beSell();
}
两个实现类:
package com.teng.pattern.impl; /** * 房子 * <br>创建日期:2016年7月3日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class House extends Product { @Override public void beProduct() { System.out.println("造房子。。。"); } @Override public void beSell() { System.out.println("卖房子。。。"); } } package com.teng.pattern.impl; /** * ipad * <br>创建日期:2016年7月3日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class Ipad extends Product { @Override public void beProduct() { System.out.println("生产ipad。。。"); } @Override public void beSell() { System.out.println("出售ipad。。。"); } }
第二步,公司类
package com.teng.pattern.impl; /** * 公司抽象类 * <br>创建日期:2016年7月3日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public abstract class Corp { private Product product; /** * 设置要生产的产品 * @since 1.0 * @param product * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年7月3日 下午1:03:43 */ public void setProduct(Product product){ this.product = product; } /** * 赚钱 * @since 1.0 * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年7月3日 下午1:04:47 */ public void makeMoney(){ this.product.beProduct(); this.product.beSell(); } }
公司实现类:
package com.teng.pattern.impl; /** * 房产公司 * <br>创建日期:2016年7月3日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class HouseCorp extends Corp { @Override public void setProduct(Product product) { super.setProduct(product); } @Override public void makeMoney() { super.makeMoney(); System.out.println("房产公司赚大钱。。。"); } } package com.teng.pattern.impl; /** * 山寨公司 * <br>创建日期:2016年7月3日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class ShanZhaiCorp extends Corp { @Override public void setProduct(Product product) { super.setProduct(product); } @Override public void makeMoney() { super.makeMoney(); System.out.println("山寨公司赚钱。。。"); } }
HouseCorp类和ShanZhaiCorp类的区别是有参构造的参数类型上,HouseCorp类比较明确,我就是只要House类,所以直接定义传递进来的必须是House类。
ShanZhaiCorp就不同了,它是确定不了生产什么类型。
第三步,开始赚钱
package com.teng.pattern.impl;
/**
* <br>创建日期:2016年7月3日
* <br><b>Copyright 2016 tengxiang All Rights Reserved</b>
* @author tengxiang
* @since 1.0
* @version 1.0
*/
public class Client {
/**
* 主方法
* @since 1.0
* @param args
* <br><b>作者: @author tengxiang</b>
* <br>创建时间:2016年7月3日 下午1:09:04
*/
public static void main(String[] args) {
System.out.println("房地产公司------------------------");
HouseCorp houseCorp = new HouseCorp();
houseCorp.setProduct(new House());
houseCorp.makeMoney();
System.out.println("山寨公司--------------------------");
ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp();
shanZhaiCorp.setProduct(new Ipad());
shanZhaiCorp.makeMoney();
}
}
增加公司,你要么继承Corp类,要么继承HouseCorp或ShanZhaiCorp;
增加产品,继承Product类,或者继承House类,你要把房子分为公寓房、别墅、商业用房等;
你都是在扩展,唯一你要修改的是Client类,你类都增加了哪能不修改调用,也就是说Corp类和Product类都可以自由的扩展,而不会对整个应用产生变更,这就是桥梁模式。
业务抽象角色引用业务实现角色或者说业务抽象角色的部分实现是由业务实现角色完成的。
桥梁模式的优点就是类间解耦,两个角色都可以自己扩展下去,不会相互影响,这个符合OCP原则。
相关文章推荐
- 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“访问者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“工厂方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“策略模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“抽象工厂模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“观察者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“命令模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“代理模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“多例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“单例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“组合模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“适配器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“建造者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“迭代器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“门面模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“装饰模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“责任链模式”【整理】
- 设计模式之Adapter模式(待整理)
- 好书整理系列之-设计模式:可复用面向对象软件的基础 3