ITKeyword,专注技术干货聚合推荐

注册 | 登录

java设计模式(结构型)之桥接模式

Tianxing10 分享于 2014-03-17

推荐:[设计模式-结构型]桥接(Bridge )

概括 名称 Bridge 结构 动机 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 适用性 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

第0章:简介

桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

桥接模式的实质:分离抽象与实现

参考:http://chjavach.iteye.com/blog/738056,研磨设计模式(书籍),大话设计模式(书籍)

模式图:

待补充

第1章:实践

(1)实现部分的接口(Intf.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 实现部分的接口,与抽象部分的接口进行桥接
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:07
 */
public interface Intf {

    public void someMethod();
}

(2)实现部分的具体对象A(IntfImplA.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 实现部分的具体对象A
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:10
 */
public class IntfImplA implements Intf {
    @Override
    public void someMethod() {
        System.out.println("实现部分的具体对象A的方法");
    }
}

(3)实现部分的具体对象B(IntfImplB.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 实现部分的具体对象B
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:12
 */
public class IntfImplB implements Intf {
    @Override
    public void someMethod() {
        System.out.println("实现部分的具体对象B的方法");
    }
}

推荐:设计模式之桥接模式(Bridge)之三(典型结构图) 结构型模式

Bridge是设计模式中比较复杂和难理解的模式之一,也是OO开发和设计中经常会用到的模式之一。使用组合的方式将抽象和实现彻底的解耦,这样的好处是抽象和实现可以

(4)抽象部分的接口(Abstraction.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 抽象部分的接口,与实现部分的接口进行桥接
 *
 * 桥接模式的定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化
 * 桥接模式的本质:分离抽象与实现
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:17
 */
public abstract class Abstraction {

    //持有实现部分的接口
    protected Intf intf;

    /**
     * 构造器,传入实现部分的具体对象
     * @param intf
     */
    public Abstraction(Intf intf){
        this.intf = intf;
    }

    /**
     * 实现一定功能,可能调用实现部分的具体对象方法
     */
    public void method(){
        System.out.println("调用实现部分前的其它操作");

        //调用实现部分的具体对象方法
        intf.someMethod();

        System.out.println("调用实现部分后的其它操作");
    }
}

(5)抽象部分的具体实现对象A(AbstractionImplA.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 抽象部分的具体实现对象A
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:31
 */
public class AbstractionImplA extends Abstraction {
    /**
     * 构造器,传入实现部分的具体对象
     *
     * @param intf
     */
    public AbstractionImplA(Intf intf) {
        super(intf);
    }

    /**
     * 可复写该方法,加入其它逻辑,这里不加入
     */
    @Override
    public void method() {
        super.method();
    }
}

(6)抽象部分的具体实现对象B(AbstractionImplB.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 抽象部分的具体实现对象B
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:37
 */
public class AbstractionImplB extends Abstraction {
    /**
     * 构造器,传入实现部分的具体对象
     *
     * @param intf
     */
    public AbstractionImplB(Intf intf) {
        super(intf);
    }

    /**
     * 可复写该方法,加入其它逻辑,这里不加逻辑
     */
    @Override
    public void method() {
        System.out.println("调用抽象部分默认方法前的操作");
        //调用抽象部分的默认方法
        super.method();
        System.out.println("调用抽象部分默认方法前的操作");
    }
}

(7)客户端测试(Client.java)

package com.mcc.core.designPattern.structure.bridge;

/**
 * 客户端测试
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-13  下午10:40
 */
public class Client {

    public static void main(String args[]){

        //实现部分对象
        Intf intfA = new IntfImplA();
        Intf intfB = new IntfImplB();

        System.out.println("\n抽象对象A桥接实现对象A:\n");
        Abstraction abstractionAA = new AbstractionImplA(intfA);
        abstractionAA.method();

        System.out.println("\n抽象对象A桥接实现对象B:\n");
        Abstraction abstractionAB = new AbstractionImplA(intfB);
        abstractionAB.method();

        System.out.println("\n抽象对象B桥接实现对象A:\n");
        Abstraction abstractionBA = new AbstractionImplB(intfA);
        abstractionBA.method();

        System.out.println("\n抽象对象B桥接实现对象B:\n");
        Abstraction abstractionBB = new AbstractionImplB(intfB);
        abstractionBB.method();
    }
}



推荐:23种设计模式(7)_结构型_桥接模式(Bridge Pattern)

一、引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个

第0章:简介 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化 桥接模式的实质:分离抽象与实现 参考:http://chjavach.iteye.com/blog/738056,研磨设计模式(书籍),大

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。