桥接模式

306 阅读1分钟

概念

实现系统可能有多个维度分类,每一种维度都可能变化,那么把这种多维度分类给分离出来让他们独立变化,减少他们之间耦合,将继承关系转化成组合关系,它降低了类与类之间的耦合度,减少了系统中类的数量。

比如对于笔,有大,小两种型号,有红,蓝两种颜色,构建笔这个对象有两种方案 1 为每种型号的笔都提供一套各种颜色的版本 2 对型号和颜色进行组合成对象 显然方案2便于扩展,这便是利用桥接模式,将继承转换为关联关系,降低类耦合

实现方式

  • Abstraction —— 抽象部分(抽象类),保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分中的对象来实现。
  • RefinedAbstraction —— 优化的抽象部分(具体类)。上面抽象部分的具体实现,对其中的方法进行完善和扩展
  • Impementor —— 实现部分,(接口或抽象类),一般是由实现部分提供基本操作,抽象部分定义的是基于实现部分这些基本操作的业务方法。
  • ConcreteImpementor —— 具体实现部分。
    public interface Color {
        void paint(String str, int penType);
    }

    public class Red implements Color {
        @Override
        public void paint(String str, int penType) {
            System.out.println("Red color : " + str + "\npenType = " + penType);
        }
    }

    public class Blue implements Color {
        @Override
        public void paint(String str, int penType) {
            System.out.println("Blue color : " + str + "\npenType = " + penType);
        }
    }

    public abstract class Pen {
        protected Color color;

        public void setColor(Color color) {
            this.color = color;
        }

        public abstract void draw(String name);
    }

    public class BigPen extends Pen {
        @Override
        public void draw(String name) {
            color.paint(name, 2);
        }
    }

    public class SmallPen extends Pen {
        @Override
        public void draw(String name) {
            color.paint(name, 1);
        }
    }