网站做商城,企业公示信息查询系统湖北,栖霞网站设计,wordpress调用网页本文是阅读《设计模式之美》的总结和心得#xff0c;跳过了书中对面试和工作用处不大或不多的知识点#xff0c;总结总共分为三章#xff0c;分别是面对对象编程范式、设计原则和设计模式 现如今#xff0c;编程范式存在三种#xff0c;它们分别是面向对象编程、面向过程编… 本文是阅读《设计模式之美》的总结和心得跳过了书中对面试和工作用处不大或不多的知识点总结总共分为三章分别是面对对象编程范式、设计原则和设计模式 现如今编程范式存在三种它们分别是面向对象编程、面向过程编程和函数式编程。其中面向对象编程是目前最流行的因为随着互联网技术的不断发展应用程序的体量越来越大代码行数越来越多面对对象编程范式拥有的封装、抽象、继承和多态特性在面对大型系统的时候可以让程序员更容易设计和组织出高内聚、低耦合、易扩展和已读的代码。
四大特性
封装
封装也称为信息隐藏或数据访问保护。在 Java 类中会存在成员变量利用 Java 语言提供的访问修饰符 private 可以限定只能本类可以访问其他类对封装在该类中的变量一无所知。 然后我们通过提供 public 访问修饰符修饰的方法供其他类访问在定义 public 类型的方法时我们要注意不能给所有的成员变量创建 getter setter 方法这样就相当于将变量以 public 来修饰了我们应该只提供给外界需要的公共方法尽量不要让外界直接访问类的成员变量。
抽象
抽象是隐藏方法的内部实现让调用者只需要关心方法提供了什么功能并不需要知道这个功能是如何实现的。 除了使用接口和抽象类来实现抽象特性之外还可以用 “函数” 这一语法机制实现。通过函数包裹具体的实现逻辑这本身就是一种抽象。大多数编程语言都提供了 “函数” 这一基础的语法机制。因此抽象没有很强的 “特异性”因此在很多图书中介绍面向对象编程的时候只介绍封装、继承、多态三种特性。
继承
继承分为单继承和多继承Java 语言认为多继承会增加代码的复杂性所以只提供了单继承的语法机制。同时在设计原则中有一条 “多用组合少用继承”也说明过度使用继承会导致代码的可读性和可维护性变差。 继承用来表示类之间的 is-a 关系如猫是一种哺乳动物子类继承父类子类可以拥有父类中 public 和 protected 修饰的变量和方法子类无需重复定义公共的方法由此可知继承的主要作用是代码复用。
多态
多态是指在代码运行过程中我们可以用子类替换父类并调用子类的方法。多态可以通过继承来实现也可以通过接口来实现。 如果一个接口 A它的实现类有 B、C、D现在需要定义一个 print 方法来打印它们如果没有多态那么我们要实现三个方法分别是 print(B b)print(C c)print(D d)而如果使用多态我们就只需要定义一个方法 print(A a)。由此可见多态和继承一样它的出现也提高了代码的复用性。 同时多态也是很多设计模式、设计原则的代码实现基础如策略模式、基于接口而非实现编程、依赖倒置。
“贫血”模型和“充血”模型
很多业务系统是基于 MVC 三层架构开发的。实际上更确切地讲这是一种基于 “贫血” 模型的 MVC 三层架构开发模式。虽然这种开发模式已经称为标准的 Web 项目的开发模式但它违反了面向对象编程风格是彻彻底底的面向过程编程风格。基于领域驱动设计Domian Drive DesignDDD开发模式的 MVC 三层机构开发模式才称得上是面向对象编程风格。 在 MVC 三层架构中三层分别是展示层 Controller、逻辑层 Service、数据层 Repository。业务逻辑的代码全部分布在 Service 层整个代码的设计流程如下 RepositoryEntity》Serviceconvert(Entity)Bo》Controllerconvert(Bo)Vo
其中 Bo 是 Business Object在这里它只包含数据不包含业务逻辑这种数据和方法不在一个类中的编程风格就是面向过程编程风格。 与基于 DDD 开发模式的 MVC 三层架构相比两者唯一的不同就是 “充血” 模型中的 Bo 既包含数据又包含业务逻辑方法。 可以这样理解将基于 “贫血” 模型中 Service 层的业务逻辑代码抽取到 Bo 中就可以实现 “贫血” 到 “充血” 的转换。