设计模式—面向对象

面向对象概述

3种主流编程范式(风格)

面向过程 面向对象 函数式编程

面向对象

概念:一种以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现基石的编程范式。 最主流:流向的编程语言大部分是面向对象编程语言 特性丰富:可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础

面向对象4大特性

封装

概念:信息隐藏或者数据访问保护;类通过暴露有限的访问接口,授权外部仅能通过类提供的方法来访问内部信息或者数据 实现:需要编程语言提供权限访问控制语法来支持,例如Java 中的 private、protected、public 关键字 意义 保护数据不被随意修改,提高代码的可维护性 仅暴露有限的必要接口,提高类的易用性

抽象

概念:讲如何隐藏方法的具体实现,让使用者只关心方法的功能 实现:通过接口类或者抽象类来实现 意义 修改实现不需要改变定义 处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息

继承

概念 表示类之间的 is-a 关系,分为两种模式:单继承和多继承 单继承:一个子类只继承一个父类 多继承:一个子类可以继承多个父类 实现:编程语言需要提供特殊的语法机制来支持 意义:主要是用来解决代码复用的问题

多态

概念:子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现 实现:需要编程语言提供特殊的语法机制来实现,比如继承、接口类、duck-typing 意义:提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础

面向对象VS面向过程

更能应对这种复杂类型的程序开发 具有更加丰富的特性(封装、抽象、继承、多态) 更加人性化、更加高级、更加智能

面向对象分析、设计与编程

面向对象分析(OOA):搞清楚做什么,产出详细的需求描述 面向对象设计(OOD):搞清楚怎么做,将需求描述转化为具体的类 根据需求描述中的功能点划分职责进而识别出有哪些类 定义类及其属性和方法 识别出需求描述中的动词,作为候选的方法,再进一步过滤筛选出真正的方法,把功能点中涉及的名词,作为候选属性,然后同样再进行过滤筛选 定义类与类之间的交互关系:泛化、实现、组合、依赖 泛化:就是继承extends 实现:接口和类之间的关系implements 组合:包含关系,在新类中创建原有类的对象,重复利用已有类的功能 依赖:只要 B 类对象和 A 类对象有任何使用关系,我们都称它们有依赖关系 将类组装起来并提供执行入口 将所有的类组装在一起,提供一个执行入口。可能是一个 main() 函数,也 可能是一组给外部用的 API 接口。通过这个入口能触发整个代码运行 面向对象编程(OOP):将分析和设计的的结果翻译成代码

接口VS抽象类

抽象类

概念:对成员变量和方法的抽象,是一种 is-a 关系 特性 不允许被实例化,只能被继承 可以包含属性和方法。方法既可以包含代码实现, 也可以不包含代码实现。不包含代码实现的方法叫作抽象方法 子类继承抽象类,必须实现抽象类中的所有抽象方法 意义:解决代码复用问题

接口

概念:对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性 特性 接口不能包含属性(Java 可以定义静态常量) 只能声明方法,方法不能包含代码实现(Java8 以后可以有默认实现) 类实现接口的时候,必须实现接口中声明的所有方法 意义:解决解耦问题,隔离接口和具体的实现,提高代码的扩展性 应用判断的标准 如果要表示一种 is-a 的关系,并且是为了解决代码复用问题,就用抽象类 如果要表示一种 has-a 关 系,并且是为了解决抽象而非代码复用问题,就用接口

基于接口而非实现编程

实现原则 函数的命名不能暴露任何实现细节 封装具体的实现细节 为实现类定义抽象的接口。具体的实现类都依赖统一的接口定义 可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口 越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化

多用组合少用继承

为什么不推荐使用继承

继承层次过深、过复杂,也会影响到代码的可维护性

组合相比继承的优势

继承的3个作用 表示 is-a 关系 支持多态特性 代码复用 组合还能解决层次过深、过复杂的继承关系影响代码可维护性的问题

应用场景区别

类之间的继承结构稳定,层次比较浅,关系不复杂,使用继承;反之,用组合 鼓励多用组合少用继承,但组合也并不是完美的,继承也并非一无是处

贫血模型VS充血模型

基于贫血模型的MVC开发模式:面向过程;适合业务不复杂的系统开发 Repository层(数据访问层) Service 层(业务逻辑层):分割为数据BO和业务逻辑Service两个类,不包含业务逻辑的类BO就是贫血模型 Controller层(接口层) 基于充血的DDD开发模式:面向对象;适合业务复杂的系统开发 Repository层(数据访问层) Service 层(业务逻辑层):包含 Service 类和 Domain 类两部分。Domain 就相当于 BO。区别在于它既包含数据,也包含业务逻辑。而 Service 类变得非常单薄 Controller层(接口层) 区别:主要在于Service层的划分,其它层都基本一致

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值