乱用继承导致的类爆炸

简介: 摘要(Markdown格式):了解**复杂度守恒定律**,源于1984年,指出应用的复杂性无法消除,只能转移。在探究设计模式时,发现了**桥接模式**。桥接模式通过组合而非继承处理多维度变化,避免类爆炸问题。当图形颜色和类型变化时,原本的抽象类和实现类会导致大量类产生。通过桥接模式优化,将颜色和形状解耦,实现了更灵活的结构。

昨天学习设计模式,其中有一个桥接模式让我深刻;

今天中午有复盘一下;

首先说下复杂度守恒定律,这一观点主要被应用在交互设计领域。我们不得不面对的问题是,该由谁来为这一固有的复杂度埋单。打个比方,应该由软件开发工程师花费额外的时间来使软件变得更加简单好用,还是应该让用户自己去解决软件使用中可能存在的问题?

复杂度守恒定律由Larry Tesler于1984年提出,也称泰斯勒定律(Tesler’s Law)。复杂度守恒定律(Law of conservation of complexity)由Larry Tesler于1984年提出,也称泰斯勒定律(Tesler’s Law)。
根据复杂度守恒定律,每个应用程序都具有其内在的、无法简化的复杂度。无论在产品开发环节还是在用户与产品的交互环节,这一固有的复杂度都无法依照我们的意愿去除,只能设法调整、平衡。

桥接模式?,那是个啥” 心中突然蹦出这么一个想法。我心血来潮,去搜索

image-20240616180310518

再去菜鸟教程看看

image-20240616180351799

有一个图形的案列

image-20240616180458923

这时候心里念着”首先有一个图形的基类,然后开始继承走起 红色的圆形、 红色的矩形、 蓝色的圆形、蓝色的矩形。“ 没毛病,一个抽象类,四个实现类,搞定

代码写完,测一手。画出类图

img

    @Test
    void shape(){
   
   
        Shape blueCircle = new BlueCircle();
        Shape blueRectangle = new BlueRectangle();
        Shape redCircle = new RedCircle();
        Shape redRectangle = new RedRectangle();

        blueCircle.create();
        blueRectangle.create();
        redCircle.create();
        redRectangle.create();
    }

结果

蓝色の圆形
蓝色の长方形
红色の圆形
红色の长方形

感觉还可以,如果再加一种形状呢?

再加两个类不就行了? RedTriangle、BlueTriangle,

也还行,如果再这基础上再加一种绿颜色呢

再加三个类 GreenCircle、 GreenRectangle、GreenTriangle”

再加一个椭圆呢

这样就造成类爆炸了

UML中的聚合组合!

img

所以再仔细想想就可以优化代码

bridge1.png

这个就是组合和聚合的意思,同时他们与主体之间的关联关系的表达

相关文章
|
4天前
|
Java
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
|
1月前
|
存储 编译器 C语言
C++的面向诗篇:类的叙事与对象的旋律
C++的面向诗篇:类的叙事与对象的旋律
27 0
|
10月前
|
存储 安全 编译器
【巧妙继承】C++玩转继承的神级技巧
【巧妙继承】C++玩转继承的神级技巧
|
11月前
|
C++
自考学习C++ 继承与派生
自考学习C++ 继承与派生
重写前奏~继承和多态
上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;
|
C++
第十三章 类继承
第十三章 类继承
71 0
final关键字:我偏不让你继承
final关键字:我偏不让你继承
|
Java 编译器 测试技术
Java面向对象的三大特征之继承
Java面向对象的三大特征之继承
|
Java 索引
java面向对象三大特征之一多态(多类调用)
多态是方法的多态,和属性没有关系
97 1
java面向对象三大特征之一多态(多类调用)
|
Java Maven
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“