设计模式

桥接模式

2019-08-05  本文已影响0人  闽越布衣

描述

    桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。

简介

桥接模式结构图

    桥接的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦。这句话有三个关键词,也就是抽象化、实现化和脱耦。

角色

优缺点

优点

缺点

使用场景

示例

    假如有这样一个业务场景:导出项目的需求。
    从业务上看,导出格式又分成word格式、execl格式、pdf格式等多种,不同的格式类型,业务功能处理是不一样的;从导出的手段上看,又有直接下载、发送到邮件、导出到系统个人空间内等。

/**
 * 实现化(Implementor)角色
 */
public interface ExportWay {
    void export(String requirement);
}
/**
 * 具体实现化(ConcreteImplementor)角色
 */
public class EmailExport implements ExportWay {
    @Override
    public void export(String requirement) {
        System.out.println("通过邮件导出需求:" + requirement);
    }
}
/**
 * 具体实现化(ConcreteImplementor)角色
 */
public class DownloadExport implements ExportWay {
    @Override
    public void export(String requirement) {
        System.out.println("通过直接下载导出需求:" + requirement);
    }
}
/**
 * 具体实现化(ConcreteImplementor)角色
 */
public class EmailExport implements ExportWay {
    @Override
    public void export(String requirement) {
        System.out.println("通过邮件导出需求:" + requirement);
    }
}

/**
 * 抽象化(Abstraction)角色
 */
public abstract class ExportRequirement {
   /**
    *  持有一个实现部分的对象
    */
    private ExportWay exportWay;

    public ExportRequirement(ExportWay exportWay) {
        this.exportWay = exportWay;
    }

    public void exportFormat(String requirement) {
        this.exportWay.export(requirement);
    }
}
/**
 * 修正抽象化(RefinedAbstraction)角色
 */
public class PdfFormat extends ExportRequirement {
    public PdfFormat(ExportWay exportWay) {
        super(exportWay);
    }

    @Override
    public void exportFormat(String requirement) {
        System.out.println("导出PDF格式的需求");
        super.exportFormat(requirement);
    }
}
/**
 * 修正抽象化(RefinedAbstraction)角色
 */
public class WordFormat extends ExportRequirement{
    public WordFormat(ExportWay exportWay) {
        super(exportWay);
    }

    @Override
    public void exportFormat(String requirement) {
        System.out.println("导出word格式的需求");
        super.exportFormat(requirement);
    }
}
/**
 * 修正抽象化(RefinedAbstraction)角色
 */
public class ExcelFormat extends ExportRequirement {
    public ExcelFormat(ExportWay exportWay) {
        super(exportWay);
    }

    @Override
    public void exportFormat(String requirement) {
        System.out.println("导出excel格式的需求");
        super.exportFormat(requirement);
    }
}

上一篇 下一篇

猜你喜欢

热点阅读