设计模式之桥接模式(Bridge)

来源:互联网 发布:2010装饰定额预算软件 编辑:程序博客网 时间:2024/06/05 02:33
意图:
将抽象部分和它的实现部分分离,使他们都可以独立的变化.

适用性:
1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系.
2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.
3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译.

效果:
1.分类接口及其实现部分
2.提高可扩充性
3.实现细节对客户透明

代码实现:

package com.git.books.b_design_patterns.g_bridge;/** *  * @Description: 桥接模式--实现类抽象接口 * @author: songqinghu * @date: 2017年3月2日 下午2:41:47 * Version:1.0 */public abstract class Brand {    //获取品牌logo    public abstract String getBrandLogo();}

package com.git.books.b_design_patterns.g_bridge;/** *  * @Description:桥接模式-抽象引用接口 * @author: songqinghu * @date: 2017年3月2日 下午2:39:54 * Version:1.0 */public abstract class MobilePhone {    protected Brand brand;    public abstract void run();    public MobilePhone(Brand brand) {        this.brand = brand;    }}

package com.git.books.b_design_patterns.g_bridge;/** *  * @Description: 1个cpu的手机  手机系统下的具体实现类  client将要调用的对象 * @author: songqinghu * @date: 2017年3月2日 下午2:47:39 * Version:1.0 */public class OneCPUMobilePhone extends MobilePhone {    public OneCPUMobilePhone(Brand brand) {        super(brand);    }    @Override    public void run() {        System.out.println("the one cpu mobile phone is run and the brand is : " + brand.getBrandLogo());    }}

package com.git.books.b_design_patterns.g_bridge;public class TwoCPUMobilePhone extends MobilePhone {    public TwoCPUMobilePhone(Brand brand) {        super(brand);    }    @Override    public void run() {        System.out.println("the two cpu "+brand.getBrandLogo()+" mobile phone is run !");    }}

package com.git.books.b_design_patterns.g_bridge;public class HuaWeiBrand extends Brand {    @Override    public String getBrandLogo() {        return " HuiWei ";    }}

package com.git.books.b_design_patterns.g_bridge;public class XiaomiBrand extends Brand {    @Override    public String getBrandLogo() {        return " Xiaomi ";    }}

package com.git.books.b_design_patterns.g_bridge;public class XiaomiBrand extends Brand {    @Override    public String getBrandLogo() {        return " Xiaomi ";    }}

结构图:



重点:

使用引用关系建立两个分层间的桥接,使其能独立的扩展(开闭);

参考:
<<设计模式>>
<<Java与模式>>









0 0
原创粉丝点击