适用场合:实现系统可能有多个角度分类,每一种分类都可能有变化,那么就把这种 多角度分离出来让它们独立变化,减少它们之间的耦合。
什么是桥接模式呢?桥接模式将抽象部分与它的实现部分分离,使它们可以独立变化。
下面是相关的主要架构代码:
1 两个抽象类HandsetBrand.java、HandsetSoft.java
1.1 HandsetBrand.java
package com.ops.bridge;
public abstract class HandsetBrand {
protected HandsetSoft soft = null;
public void setHandsetSoft(HandsetSoft soft) {
this.soft = soft;
}
public abstract void run();
}
1.2 HandsetSoft.java
package com.ops.bridge;
public abstract class HandsetSoft {
public abstract void run();
}
2 相关实现类HandsetBrandHW.java、HandsetBrandTCLj.ava、HandsetAddressList.java、HandsetGame.java
2.1 HandsetBrandHW.java
package com.ops.bridge.base;
import com.ops.bridge.HandsetBrand;
public class HandsetBrandHW extends HandsetBrand {
@Override
public void run() {
this.soft.run();
}
}
2.2 HandsetBrandTCLj.ava
package com.ops.bridge.base;
import com.ops.bridge.HandsetBrand;
public class HandsetBrandTCL extends HandsetBrand {
@Override
public void run() {
this.soft.run();
}
}
2.3 HandsetAddressList.java
package com.ops.bridge.base;
import com.ops.bridge.HandsetSoft;
public class HandsetAddressList extends HandsetSoft {
@Override
public void run() {
System.out.println("Run Handset AddressList.");
}
}
2.4 HandsetGame.java
package com.ops.bridge.base;
import com.ops.bridge.HandsetSoft;
public class HandsetGame extends HandsetSoft {
@Override
public void run() {
System.out.println("Run HandSet game.");
}
}
3 客户端组装代码BridgeClient.java
package com.ops.bridge.base.main;
import org.junit.Test;
import com.ops.bridge.HandsetBrand;
import com.ops.bridge.base.HandsetAddressList;
import com.ops.bridge.base.HandsetBrandHW;
import com.ops.bridge.base.HandsetBrandTCL;
import com.ops.bridge.base.HandsetGame;
public class BridgeClient {
@Test
public void test() {
HandsetBrand handsetBrand = null;
handsetBrand = new HandsetBrandTCL();
handsetBrand.setHandsetSoft(new HandsetGame());
handsetBrand.run();
handsetBrand.setHandsetSoft(new HandsetAddressList());
handsetBrand.run();
handsetBrand = new HandsetBrandHW();
handsetBrand.setHandsetSoft(new HandsetGame());
handsetBrand.run();
handsetBrand.setHandsetSoft(new HandsetAddressList());
handsetBrand.run();
}
}