• 桥接模式


    桥接模式

    先不说定义直接来看一个问题,有一个手机抽象类

    public abstract class Phone{
        public abstract void getName();
        public abstract void getRam();
    }
    

    里面有两个抽象方法,获得手机型号和内存大小。现在我们想实例化小米10这个型号的手机

    public class Mi106g extends Phone {
        @Override
        public void getName() {
            System.out.println("小米10");
        }
    
        @Override
        public void getRam() {
            System.out.println("6");
        }
    }
    public class Mi1068g extends Phone {
        @Override
        public void getName() {
            System.out.println("小米10");
        }
    
        @Override
        public void getRam() {
            System.out.println("8");
        }
    }
    

    两个方法可能看起来不明显,是1x2,如果现在多出一个方法是getRom,Rom的种类有3种,128,256,512。那么需要的类就变成了1x2x3,属性越多需要的类就越多,这样维护起来就很麻烦。这时候我们就需要用组合解决这个子类爆炸的问题

    public abstract class Phone {
        Ram ram;
        public void setRam(Ram ram){
            this.ram = ram;
        }
        public abstract void model();
    }
    
    public abstract class Ram {
        public abstract void getRam();
    }
    
    

    现在Ram作为一个单独的类,和Phone组合

    public class Mi10 extends Phone {
        @Override
        public void model() {
            System.out.println("Mi10");
        }
    }
    public class Ram6 extends  Ram {
        @Override
        public void getRam() {
            System.out.println("6g");
        }
    }
    public class Ram8 extends  Ram {
        @Override
        public void getRam() {
            System.out.println("8g");
        }
    }
    

    那我们要获得一个6g的Mi10怎么来弄呢

    Phone Mi106g = new Mi10();
    Mi106g.setRam(new Ram6());
    

    或者是设置在构造函数里,重点在于组合。

    现在来看一下桥接模式的定义

    将抽象部分与它的实现部分分离,使它们都可以独立地变化。

    我感觉这个确实有点抽象不太好理解,这里不是说编程语言里的抽象和实现,结合上面的例子,手机的型号可以理解为抽象,Ram理解为实现,因为手机型号是一个笼统的概念,而Ram就是内存本身,通过把他俩分离开来,型号可以单独的变化,内存大小也可以单独的变化,然后再组合到一起。

    总结

    个人觉的桥接模式就是用组合避免继承子类爆炸问题

  • 相关阅读:
    DICOM 协议学习笔记之 What is DICOM
    决策树(ID3,C4.5,CART)
    支持向量机(support vector machines, SVM)
    回归分析-线性回归与逻辑回归
    第8章 线程
    第7章 常用实用类
    第5章 语法制导翻译及中间代码生成
    第4章 语法分析
    第3章 词法分析
    第2章 形式语言基础知识
  • 原文地址:https://www.cnblogs.com/ljsh/p/12821938.html
Copyright © 2020-2023  润新知