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

第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的方法");
    }
}

(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();
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值