桥接模式

桥接模式:将抽象部分与它的实现部分分离,使他们能够独立的变化。

合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。
聚合表示的是一种弱的拥有关系,体现了A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了严格的整体与部分的关系,部分与整体的生命周期是一样的。

抽象实例


Implementor.java

public abstract class Implementor {
    public abstract void operation();
}

class ConcreteImplementA extends Implementor{
    @Override
    public void operation() {
        System.out.println("具体实现类A的实现");
    }
}

class ConcreteImplementB extends Implementor{
    @Override
    public void operation() {
        System.out.println("具体实现类B的实现");
    }
}

Abstraction.java

public class Abstraction {

    protected Implementor implementor;

    public void setImplementor(Implementor implementor){
        this.implementor=implementor;
    }

    public void operation(){
        implementor.operation();
    }

}

RefinedAbstraction.java

public class RefinedAbstraction extends Abstraction{

    @Override
    public void operation() {
        implementor.operation();
    }

}

Test.java

public class Test {

    public static void main(String[] args) {
        RefinedAbstraction refinedAbstraction = new RefinedAbstraction();

        refinedAbstraction.setImplementor(new ConcreteImplementA());
        refinedAbstraction.operation();

        refinedAbstraction.setImplementor(new ConcreteImplementB());
        refinedAbstraction.operation();

    }

}

具体实例

手机与软件之间的聚合关系

HandSetSoft.java-手机软件

/**
 * 手机软件
 * @author Carl_Hugo
 */
public abstract class HandSetSoft {
    public abstract void run();
}

class HandSetGame extends HandSetSoft{
    @Override
    public void run() {
        System.out.println("运行手机游戏");
    }
}

class HandSetAddressList extends HandSetSoft{
    @Override
    public void run() {
        System.out.println("运行手机通讯录");
    }
}

HandSetBrand.java-手机品牌

public abstract class HandSetBrand {

    protected HandSetSoft soft;
    //设置手机软件
    public void setHandSetSoft(HandSetSoft soft){
        this.soft=soft;
    }
    //运行
    public abstract void run();
}

class HandSetBrandN extends HandSetBrand{
    @Override
    public void run() {
        System.out.print("品牌N:");
        soft.run();
    }
}

class HandSetBrandM extends HandSetBrand{
    @Override
    public void run() {
        System.out.print("品牌M:");
        soft.run();
    }
}

测试

public class Test {

    public static void main(String[] args) {
        HandSetBrand ab;
        ab=new HandSetBrandN();

        ab.setHandSetSoft(new HandSetGame());
        ab.run();
        ab.setHandSetSoft(new HandSetAddressList());
        ab.run();

        ab=new HandSetBrandM();

        ab.setHandSetSoft(new HandSetGame());
        ab.run();
        ab.setHandSetSoft(new HandSetAddressList());
        ab.run();

    }
}

输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值