设计模式之桥接模式
2016-06-25 15:26
267 查看
什么是桥接模式
将抽象和实现解耦,使得两者可以独立变化
桥接模式的4个角色
Abstraction、Implementor、RedefinedAbstraction、ConcreteImplementor
Abstraction:抽象化角色,定义出角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类,示例中为Corp类
Implementor:实现化角色,接口或者抽象类,定义角色必须的行为和属性,示例中为Product类
RedefinedAbstraction:修正化角色,引用实现化角色对抽象化角色进行修正,示例中为RealtyCorp类
ConcreteImplementor:具体实现化角色,实现接口或抽象类定义的方法和属性,示例中为House类和CheapIphone类
代码示例
将抽象和实现解耦,使得两者可以独立变化
桥接模式的4个角色
Abstraction、Implementor、RedefinedAbstraction、ConcreteImplementor
Abstraction:抽象化角色,定义出角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类,示例中为Corp类
Implementor:实现化角色,接口或者抽象类,定义角色必须的行为和属性,示例中为Product类
RedefinedAbstraction:修正化角色,引用实现化角色对抽象化角色进行修正,示例中为RealtyCorp类
ConcreteImplementor:具体实现化角色,实现接口或抽象类定义的方法和属性,示例中为House类和CheapIphone类
代码示例
package com.pattern.bridge; /** * 公司类,抽象类,具体的公司需要继承这个类 * @author yjzhou */ public abstract class Corp { private Product product; /** * 初始化本公司产品 * @param product */ public Corp(Product product) { this.product = product; } /** * */ public void makeMoney(){ this.product.produce(); this.product.sell(); } }
package com.pattern.bridge; /** * 产品类,所有的产品都要继承这个类 * @author yjzhou */ public abstract class Product { /** * 产品制造 */ public abstract void produce(); /** * 产品销售 */ public abstract void sell(); }
package com.pattern.bridge; /** * 房地产公司,只买卖房子 * @author yjzhou */ public class RealtyCorp extends Corp{ public RealtyCorp(House house) { super(house); } /** * 房地产公司的赚钱方法 */ public void makeMoney(){ super.makeMoney(); System.out.println("房地产公司赚钱了-----"); } }
package com.pattern.bridge; public class House extends Product{ @Override public void produce() { System.out.println("制造房子---"); } @Override public void sell() { System.out.println("卖房子------"); } }
package com.pattern.bridge; /** * 山寨Iphone产品类 * @author yjzhou */ public class CheapIphone extends Product{ @Override public void produce() { System.out.println("山寨Iphone制造了------"); } @Override public void sell() { System.out.println("山寨Iphone开始销售了-----"); } }
package com.pattern.bridge; /** * 山寨产品公司,产品不确定 * @author yjzhou */ public class CheapCopy extends Corp{ public CheapCopy(Product product) { super(product); } public void makeMoney(){ super.makeMoney(); System.out.println("山寨产品公司赚钱了-------"); } }
package com.pattern.bridge; public class TestBridge { public static void main(String[] args) { RealtyCorp realtyCorp = new RealtyCorp(new House()); realtyCorp.makeMoney(); CheapCopy cheapCopy = new CheapCopy(new CheapIphone()); cheapCopy.makeMoney(); } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用