设计模式

 

原则
Single Responsibility Principle SRP 单一职责原则 一个类只干一件事,实现类要单一 便于理解,提高代码的可读性
Open Closed Principle OCP 开闭原则 对扩展开放,对修改关闭 降低维护带来的新风险
Liskov Substitution Principle LSP 里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 防止继承泛滥
Law of Demeter LoD 迪米特法则 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 只和朋友交流,不和陌生人说话,减少代码臃肿
Interface Segregation Principle ISP 接口隔离原则 一个接口只干一件事,接口要精简单一 功能解耦,高聚合、低耦合
Dependence Inversion Principle DIP 依赖倒置原则 高层不应该依赖低层,要面向接口编程 更利于代码结构的升级扩展
Composite Reuse Principle CRP 合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 降低代码耦合
 
控制反转 IoC
 
依赖注入优势,官网给的总结:
 
重用类以及分离依赖项:更容易换掉依赖项的实现。由于控制反转,代码重用得以改进,并且类不再控制其依赖项的创建方式,而是支持任何配置。
易于重构:依赖项成为 API Surface 的可验证部分,因此可以在创建对象时或编译时进行检查,而不是作为实现详情隐藏。
易于测试:类不管理其依赖项,因此在测试时,您可以传入不同的实现以测试所有不同用例。
自动注入框架: Dagger, Hilt, Coin

依赖注入表现为生成依赖对象的过程(new)在类的外部。
比如需要鸡蛋,养鸡场负责产蛋,然后买来,而不是自己养鸡生蛋,或者把养鸡场的鸡抱来生蛋。
三种注入方法: 构造函数注入,属性注入,方法注入(其目的都是实现控制反转)
 
 
https://zhuanlan.zhihu.com/p/439238818
  • 关注点分离(SOC / Separation Of Concerns)  分层合理,提高可测性
  • 数据驱动 UI(Reactive)
  • 唯一真相源(SSOC / Single Source Of Truth)
 UI Controller 层 - Activity 和 Fragment
 ViewModel 层 -  MVVM 的 VM、MVP 的 P,也可以做 UI 的数据适配
 Repository 层 - 作为 SSOC,是一个 Facade 模式,对上层屏蔽了数据的来源,数据持久化策略向上透明
 
设计模式
创建型 简单工厂 参数化用if区分    

分离职责

简化记忆

提高灵活性

工厂职责过重

复杂度增加

扩展困难

无法继承

工厂方法  子类决定实例化哪个类    

封装细节

多态

扩展性好

 类数量多

增加理解难度

抽象工厂  子工厂类决定实例化哪个类    

隔离

增加产品族容易

 增加产品等级麻烦
单例

饿汉

懒汉,二次检查

嵌套内部静态类

枚举

构造函数私有化

静态成员

共有静态方法

 

唯一实例

节省资源

 

扩展困难

职责过重

GC导致重新实例化

建造者  汇总创建方法    

封装细节

扩展性好

范围受限

建造者多

原型

深克隆

浅克隆

   

简化创建过程

扩展性好

简化创建结构

保存状态

 修改不方便

深克隆需要嵌套类支持

结构型 代理          
适配器          
桥接          
装饰者          
外观          
组合          
享元          
行为型 模板方法          
策略          
命令          
观察者          
责任链          
状态          
迭代器          
访问者          
备忘录          
解释器          
posted @ 2023-02-05 15:09  xyphoenix  阅读(19)  评论(0)    收藏  举报