• Bridge模式(设计模式)


    作用:将类的功能层次结构与实现层次结构分离

    类的功能结构层次:父类具有基本功能,在子类中添加需要的新功能

    类的实现层次:父类通过声明抽象方法来定义接口(API),子类通过实现具体方法来实现接口(API)。子类并没有在父类的基础上新增功能,只是父类接口的具体实现。

    重点:继承是强关联,委托是弱关联

    继承很容易扩展类,但是类之间会形成了一种强关联关系(自我理解就是直接依赖关系)

    委托就可以很轻松改变这种直接依赖关系,只有当传入的参数确定的时候才能确定两者之间的关系。并且这种机制可以把类中的具体实现委托给其他类去实现,就相当于把任务承包出去一样。
    Bridge模式.png
    小案例

    Display.java

    /**
     * @Author:DarknessShadow
     * @description:
     * @date 2020/5/15 10:11
     */
    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.java

    /**
     * @Author:DarknessShadow
     * @description:
     * @date 2020/5/15 10:14
     */
    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();
        }
    }
    

    DisplayImpl.java

    /**
     * @Author:DarknessShadow
     * @description:
     * @date 2020/5/15 10:15
     */
    public abstract class DisplayImpl {
        public abstract void rawOpen();
        public abstract void rawPrint();
        public abstract void rawClose();
    }
    

    StringDisplayImpl.java

    /**
     * @Author:DarknessShadow
     * @description:
     * @date 2020/5/15 10:17
     */
    public class StringDisplayImpl extends DisplayImpl {
        private String string;
        private int width;
    
        public StringDisplayImpl(String string) {
            this.string = string;
            this.width = string.getBytes().length;
        }
    
        @Override
        public void rawOpen() {
            printLine();
        }
    
        @Override
        public void rawPrint() {
            System.out.println("|" + string + "|");
        }
    
        @Override
        public void rawClose() {
            printLine();
        }
    
        private void printLine(){
            System.out.print("+");
            for (int i = 0; i < width; i++) {
                System.out.print("-");
            }
            System.out.println("+");
        }
    }
    
  • 相关阅读:
    二叉树
    队列
    python3使用pdfminer3k解析pdf文件
    得到手机版新闻解析
    python连接redis并插入url
    Python使用requirements.txt安装类库
    (1366, "Incorrect string value: '\xF3\xB0\x84\xBC</...' for column 'content' at row 1")
    mysql中Incorrect string value乱码问题解决方案
    mysql命令
    requests ip代理池单ip和多ip设置方式
  • 原文地址:https://www.cnblogs.com/myfaith-feng/p/12893719.html
Copyright © 2020-2023  润新知