博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桥接模式-Bridge(Java实现)
阅读量:5215 次
发布时间:2019-06-14

本文共 2031 字,大约阅读时间需要 6 分钟。

桥接模式-Bridge

桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦, 将"类的功能层次结构" 与 "类的实现层次结构"分离为两个独立的类层次结构.

类的实现层次接口

DisplayImpl接口

public interface DisplayImpl {    void rawOpen();    void rawPrint();    void rawClose();}

StringDisplayImpl类

public class StringDisplayImpl implements DisplayImpl {    private String string;    private int width;    public StringDisplayImpl(String string) {        this.string = string;        this.width = string.getBytes().length;    }    public void rawOpen() {        printLine();    }    public void rawPrint() {        System.out.println("|" + string + "|");    }    public void rawClose() {        printLine();    }    private void printLine() {        System.out.print("+");        for (int i = 0; i < width; i++) {            System.out.print("-");        }        System.out.println("+");    }}

类的功能层次结构

Display类

在功能实现的最高层上关联了DisplayImpl接口, 在此处进行了桥接.

public class Display {    private DisplayImpl impl;    public Display(DisplayImpl impl) {        this.impl = impl;    }    public void open() {        impl.rawOpen();    }    public void print() {        impl.rawPrint();    }    public void close() {        impl.rawClose();    }    public final void display() {        open();        print();        close();    }}

CountDisplay类

在Display类的基础上, 进行功能上的扩展. 扩展一个multiDisplay()功能.

public class CountDisplay extends Display {    public CountDisplay(DisplayImpl impl) {        super(impl);    }    public void multiDisplay(int times) {        open();        for (int i = 0; i < times; i++) {            print();        }        close();    }}

Main

用于测试运行

public class Main {    public static void main(String[] args) {        Display d1 = new Display(new StringDisplayImpl("Hello, China."));        Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World."));        CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe."));        d1.display();        d2.display();        d3.display();        d3.multiDisplay(5);    }}

 

转载于:https://www.cnblogs.com/noKing/p/9010888.html

你可能感兴趣的文章
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
对于 yii2 高级模板 生成文件入口
查看>>
C语言math.h库函数中atan与atan2的区别
查看>>
Bresenham算法
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。...
查看>>
Elipse安装Spring Tool Suite
查看>>
Android Studio3.0 Error:Execution failed for task ':app:javaPreCompileDebug' 错误
查看>>
Tiles入门和Tiles 框架和体系结构
查看>>
URL地址下载图片到本地
查看>>
ATM作业
查看>>
redis maxmemory设置
查看>>
mysql 密码过期问题 password_expired
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
使用swagger作为restful api的doc文档生成
查看>>
JQuery图例
查看>>