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

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钟爱 装饰器模式和组合模式 ?)