美文网首页
为什么 Flutter钟爱 装饰器模式和组合模式 ?

为什么 Flutter钟爱 装饰器模式和组合模式 ?

作者: Hamiltonian | 来源:发表于2022-02-21 16:20 被阅读0次
    2401647917783_.pic.jpg

    理由1:设计模式的基本原则

    GOF(四人帮,全拼 Gang of Four), 于1994年四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,提出了此概念。

    • 对接口编程而不是对实现编程。
    • 优先使用对象组合而不是继承。

    理由2:UI布局可读性更高

    例如:通过代码嵌套的方式,Stack 是被加到Container里面,Positioned 组件是加在Stack 组件里面。Text又是被加到Positioned里面。层级关系一清二楚,代码也可以展开折叠!

    Container(
              child: Stack(
                children: [
                  Positioned(
                    child: Text("top"),
                    left: 10,
                    top: 10,
                  ),
                  Positioned(
                    child: Text("bottom"),
                    bottom: 10,
                    right: 10,
                  ),
                ],
              ),
            )
    

    如果不用装饰器模式+组合模式,会怎么样【下面是iOS UI的代码】

    [self.positionedView1 addSubview:bottomText];
    [self.positionedView2 addSubview:topText];
    [self.stackView addSubview:self.positionedView1];
    [self.stackView addSubview:self.positionedView2];
    [self.containerView addSubview:self.stackView];
    

    addSubview代码满天飞,如果addSubview的次序搞错了,子View就会被父View遮挡。

    上面还不包括UI控件创建的代码,再加上逻辑,耦合度太高了

    理由3:语义化更明显:

    案例:给ListView添加滚动指示器

    //在ListView外层包裹一个Scrollbar,并且将自身作为参数传入Scrollbar
    Scrollbar(
            child: ListView.builder(
              itemBuilder: (BuildContext context, int index) {
                return Text("index:$index");
              },
              itemCount: 200,
            ),
          )
    

    Scrollbar+ListView = 带滚动指示器的列表

    理由4:装饰器模式+组合模式践行着 面向对象的六大原则

    • 单一职责原则【Single Responsibility Principle】
    • 开闭原则 【Open Closed Principle】:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭
    • 里式替换原则【Liskov Substitution Principle】
    • 依赖倒置原则【Dependence Inversion Principle】
    • 接口隔离原则 【Interface Segregation Principle】
    • 迪米特原则 【Law of Demeter 低耦合,高内聚】

    组合模式:通过树型结构的问题中,通过模拟树🌲的层级关系,从而使得客户程序与复杂元素的内部结构解耦。

    装饰器模式:允许向一个现有的对象添加新的功能,同时又不改变其结构。实现低耦合,高内聚的代码(迪米特原则),同时满足【开闭原则】(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭),同时Flutter众多的Widget也体现了单一职责原则和接口隔离原则。

    相关文章

      网友评论

          本文标题:为什么 Flutter钟爱 装饰器模式和组合模式 ?

          本文链接:https://www.haomeiwen.com/subject/xxjilrtx.html