
理由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 低耦合,高内聚】
网友评论