android 桥接命令,Android设计模式之桥接模式

桥接模式是一种结构型设计模式,用于将抽象部分与实现部分分离,使得两者可以独立变化。在咖啡制作的例子中,通过抽象咖啡(Coffee)类和咖啡添加物(CoffeAdd)接口,实现了大小杯咖啡与加糖、原味的灵活组合,方便扩展新的咖啡类型和添加方式。当需要新增如中杯咖啡或加奶选项时,只需添加相应类即可,有效地降低了类的耦合度。
摘要由CSDN通过智能技术生成

桥接模式

1.定义:

将抽象部分与实现部分分离,使他们都可以独立的进行变化。

2.使用场景:

一个类存在着两个独立变化的维度,且这两个维度均需要进行扩展;

如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,可以通过桥接模式使它们在抽象层建立一个关联关系;

对于不希望使用继承或因为多次继承导致系统类的个数急剧增加的系统,也可以考虑使用桥接模式。

3.UML图

304e9fffcefd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4.详解:

桥接模式也称为桥梁模式,是一种结构型设计模式。其主要承担着连接两边(抽象部分与实现部分)的作用在,实际开发中,任何多维度变化类或者多个树状类之间的耦合都可以使用桥接模式来实现解耦。

在现实生活中,制作咖啡,有可能加糖或不加糖,咖啡的杯子可能是大的或小的,下面就以这个制作咖啡的例子,详细阐述桥接模式:

public interface CoffeAdd {

String addSomething();

}

public static class Sugar implements CoffeAdd {

@Override

public String addSomething() {

return "加糖";

}

}

public static class Ordinary implements CoffeAdd {

@Override

public String addSomething() {

return "原味";

}

}

上面定义了一个向咖啡里添加物品的接口,然后有两个具体的实现类:加糖(Sugar )与原味(Ordinary );

下面看制作咖啡的抽象类及其子类,可以看出,制作咖啡的抽象类(Coffe )持有了咖啡添加物的实例(CoffeAdd ),这就是上面所述的“抽象”与“实现”,Coffe对应于抽象部分,CoffeAdd对应于实现部分:

public static abstract class Coffe {

protected CoffeAdd coffeAdd;

public Coffe(CoffeAdd coffeAdd) {

this.coffeAdd = coffeAdd;

}

public abstract void makeCoffe();

}

public static class LargeCoffe extends Coffe {

public LargeCoffe(CoffeAdd coffeAdd) {

super(coffeAdd);

}

@Override

public void makeCoffe() {

System.out.println("大杯的" + coffeAdd.addSomething() + "咖啡");

}

}

public static class SmallCoffe extends Coffe {

public SmallCoffe(CoffeAdd coffeAdd) {

super(coffeAdd);

}

@Override

public void makeCoffe() {

System.out.println("小杯的" + coffeAdd.addSomething() + "咖啡");

}

}

测试代码:

public static void main(String[] args) {

Sugar sugar = new Sugar();

Ordinary ordinary = new Ordinary();

LargeCoffe largeSugerCoffe = new LargeCoffe(sugar);

largeSugerCoffe.makeCoffe();//大杯的加糖咖啡

LargeCoffe largeOrdinaryCoffe = new LargeCoffe(ordinary);

largeOrdinaryCoffe.makeCoffe();//大杯的原味咖啡

SmallCoffe smallSugarCoffe = new SmallCoffe(sugar);

smallSugarCoffe.makeCoffe();//小杯的加糖咖啡

SmallCoffe smallOrdinaryCoffe = new SmallCoffe(ordinary);

smallOrdinaryCoffe.makeCoffe();//小杯的原味咖啡

}

从输出结果一看便知,各种各样的咖啡均可制作出来了。

但是此时,如果想要制作中杯的咖啡呢?又或者想要给咖啡里加奶呢?其实很简单,上面已经定义了Coffe类以及CoffeAdd接口,仅需要再定义两个类,一个继承Coffe,一个实现CoffeAdd即可,见代码:

public static class MiddleCoffe extends Coffe {

public MiddleCoffe(CoffeAdd coffeAdd) {

super(coffeAdd);

}

@Override

public void makeCoffe() {

System.out.println("中杯的" + coffeAdd.addSomething() + "咖啡");

}

}

public static class Milk implements CoffeAdd {

@Override

public String addSomething() {

return "加奶";

}

}

测试代码就不再赘述了,相信大家都会明白。

5.代码托管地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值