本文共 3574 字,大约阅读时间需要 11 分钟。
概括
名称 | Bridge |
结构 | |
动机 | 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 |
适用性 |
|
解析
形象比喻:
BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
1.Abstraction
定义抽象类的接口。 维护一个指向Implementor类型对象的指针。 2.RefinedAbstraction 扩充由Abstraction定义的接口。 3.Implementor 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。 事实上这两个接口可以完全不同。 一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。 4.ConcreteImplementor 实现Implementor接口并定义它的具体实现。实例
这里的例子是有 软件产品和硬件产品两类产品,与金属包装和塑料包装两类包装。
使用桥接模式将产品类和包装类结合起来,就可以使用四种状况了:
软件金属包装
软件塑料包装
硬件金属包装
硬件塑料包装
涉及的文件有:
Product.java
-- SoftwareProduct.java
-- HardwareProduct.java
Package.java
-- MetalPackage.java
-- PlasticPackage.java
TestMain.java
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public abstract class Product { private String type; /** * @return the type */ public String getType() { return type; } /** * @param type * the type to set */ public void setType(String type) { this.type = type; }}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public class SoftwareProduct extends Product { public SoftwareProduct() { setType("Software"); } public void pack(Package package0) { package0.packProduct(this); }}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public class HardwareProduct extends Product { public HardwareProduct() { setType("Hardware"); } public void pack(Package package0) { package0.packProduct(this); }}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public abstract class Package { public abstract void packProduct(Product product);}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public class MetalPackage extends Package { /* * (non-Javadoc) * * @see designptn.bridge.Package#packProduct(designptn.bridge.Product) */ @Override public void packProduct(Product product) { // TODO Auto-generated method stub System.out.println(product.getType() + " pack Metal Package"); }}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public class PlasticPackage extends Package { /* * (non-Javadoc) * * @see designptn.bridge.Package#packProduct(designptn.bridge.Product) */ @Override public void packProduct(Product product) { // TODO Auto-generated method stub System.out.println(product.getType() + " pack Plastic Package"); }}
/** * @author oscar999 * @date 2013-7-24 * @version V1.0 */package designptn.bridge;public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Product sProduct = new SoftwareProduct(); Product hProduct = new HardwareProduct(); Package mPackage = new MetalPackage(); Package pPackage = new PlasticPackage(); mPackage.packProduct(sProduct); pPackage.packProduct(sProduct); mPackage.packProduct(hProduct); pPackage.packProduct(hProduct); }}
转载地址:https://oscar.blog.csdn.net/article/details/9376027 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!