写点什么

架构师训练营 -week2- 学习总结

发布于: 2020 年 06 月 17 日
架构师训练营 -week2- 学习总结

对象:

具有状态、行为和标识。

状态:表明每个对象都可以由自己的数据。

行为:表明每个对象可以产生行为。

标志:表明每个对象都区别于其它的对象。(唯一地址)

面向对象编程的描述:

万物皆为对象。

程序是对象的集合,通过发送消息来告知彼此要做的事情。

每个对象都有自己的由其它对象所构成的存储。

每个对象都拥有其类型。

某一个特定类型的所有对象都可以接受同样的消息。

面向对象编程三要素(特征)

封装性:隐藏实现接口;定义接口。

继承性:is-a 关系;has-a 关系。

多态性:后期绑定;向上转形(up casting)

充血模型:

充血模型是指大多业务逻辑和持久化放在领域对象里面,service 层只是简单封装部分业务逻辑以及控制事务、权限等。

优点:是面向对象,业务逻辑符合单一职责。

缺点:划分业务逻辑会很含糊,不好管理与拆分模块。

贫血模型:

  贫血模型是指领域对象里只有 get 和 set 方法(POJO),所有的业务逻辑都不包含在内而是放在 service 层。

优点:系统的层次结构清楚,各层之间单向依赖。

缺点:没有真正面向对象编程。

面向对象设计的目的:

强内聚,低耦合,使系统易扩展、更健壮、可移植、更简单。

面向对象设计的六大原则:

开闭原则(OCP-Open/Closed Principle)

依赖倒置原则(DIP-Dependency Inversion Principle)!!★

Liskov 替换原则(LSP-Liskov Substitution Principle)

单一职责原则(SRP-Single Responsibility Principle)

接口分离原则(ISP-Interface Segregation Principle)

合成复用原则(Composite Reuse Principle)

开闭原则-OCP:

对修改是封闭的,对扩展是开放的。

实践原则的关键:抽象!

好处:增强了系统健壮性。

依赖倒置原则-DIP:

高层模块不能依赖底层模块,而是大家都依赖于抽象。 抽象不能依赖于实现,而是实现依赖于抽象。

即先定义接口,再进行实现;高层模块不直接 new 底层模块,而是通过构造器注入、注解注入等方式将底层模块引入调用,并且要求高层模块定义注入的底层模块是其接口,在外部注入时,才将实际需要用到的实现类注入。

实现原则的关键:接口,依赖被动注入!

好处:增强了系统的可扩展性、可维护性与可测试性。

Liskov 替换原则-LSP

子类型必须能够替换掉它们的基类型。例,父类为会飞的鸟,分别有麻雀、鸵鸟继承了这个父类, 那么对于鸵鸟来说,这个父类就是不适合的。

实现原则的关键:对于子类来说,父类的方法没有不适合的。

重构方向:抽取共性到基类;改成组合。

好处:符合 OCP,增强系统的可扩展性、健壮性。

单一职责原则-SRP

又称为“内聚性原则”,即一个类,只执行一个职责,只能有一个引起它的变化的原因。

实现原则的关键:在做模型设计时,确定明确对象以及相关职责。

好处:增强系统的可移植性、健壮性。

接口分离原则-ISP

不应该强迫客户程序依赖它们不需要的方法。

实现原则的关键:针对不同客户,切割出不同的接口类;针对不同的用户,对接口类实现并封装以适配不同的客户。

好处:系统接口发生变动时,不会影响所有客户。

合成复用原则-CRP

优先使用组合/聚合的方式,而不是使用继承。


六大原则衍生的 Java 的 23 种设计模式

三大类:创建型、结构型、行为型

创建型:

工厂方法、抽象工厂、单例、建造者、原型。

结构型:

适配器、装饰器、代理、外观、桥接、组合、享元。

行为型:

策略、模板方法、观察者、迭代、责任链、命令、备忘录、状态、访问者、中介者、解释器。

发布于: 2020 年 06 月 17 日阅读数: 60
用户头像

还未添加个人签名 2020.05.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -week2- 学习总结