第二章.模式、设计原则和方法

时间:2023-01-11 23:11:44
设计原则是设计模式的基础,设计模式是按照设计原则的基础上开发,避免违反原则
 
KISS(Keep It Simple Stupid)原则
在设计和编程过程中,尽量保持简约性,避免过于复杂
 
DRY(Don't Repeat Yourself)原则
避免重复性,提取公共部份,包括代码方法及业务逻辑
 

Tell,Don't Ask原则

对数据进行合理的封装
 

YAGNI(You Ain't Gonna Need It)原则

设计只包含所需的功能,不考虑在未来的某个节点需要的功能,避免过度设计
 

SoC(Separation of Concerns)原则

把一个软件功能分离成单独的功能点,被分离的功能点有唯一的行为和数据,最大限度的代码重用、功能重用和模块重要
 
S、O、L、I、D原则
 
SRP(Single Responsibility Principle)单一职责原则
一个类不应该承担的职责过多,尽量单一
 
OCP(Open-Closed Principle)开放封闭原则
软件的实体(类或者模块)允许被扩展,但不能修改()
 
LSP(Liskov Substitution Principle)里氏替换原则
子类必须能够替换掉它们的基类型
 
ISP(Interface Segregation Principle)接口分离原则
不应该强迫类实现不需要的方法,如果一个接口中包含过多的方法要考虑对方法进行分组
 
DIP(Dependency Inversion Principle)依赖倒置原则
高层的代码不应该依赖底层的代码,两者都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象
 
(mock测试:当对象不可确定,无法预测时,使用虚拟对象替代的测试方法)
 
设计模式简介
创建型模式:用来创建对象的模式,抽象了实例化的过程
  • 单例模式(Singleton Pattern):解决实体对象的个数问题
  • 工厂方法模式(Factory Pattern):在工厂方法中,工厂类成了抽象类,创建实例的过程由其派生的具体类来完成,强调"单个对象"的变化
  • 抽象工厂模式(Abstract Factory):抽象工厂是所有工厂械模式中最为抽象且最具一般性的一种形态,强调"系列对象"的变化
  • 生成器模式(Builder Pattern):将构造对象实例的逻辑移到了类的外面,类的外部定义了这个类的构造逻辑,将一个复杂对象的构造过程从对象的表示中分离出来,强调对象构造的过程
  • 原型模式(Prototype Pattern):和工厂模式一样,向客户隐藏了对象创建的过程,但与实例化一个新对象的方式不同,原型模式是通过对象的复制而得到一个新对象
 

-->创建型对象的两个特点:

  1. 将系统中使用到的具体类隐藏起来
  2. 隐藏这些实例是如何创建和组织的
结构型模式:讨论类和对象的结构,通过继承、组合接口或实现、组合一些对象实现新的功能
  • 适配器模式(Adapter Pattern):通过类的继承或组合,将不兼容的接口变成兼容,侧重转换已有的接口
  • 桥接模式(Bridge Pattern):通过将抽象与实现分离,让它们能够独立地变化,它强调系统沿着多个方向变化
  • 装饰者模式(Decorator):采用组合而非继承的方式,能够在运行时动态扩展对象的功能,它强调接口的扩展
  • 组合模式(Composite):模糊了简单元素和复杂元素的概念,它强调的是一种类层次的结构
  • 外观模式(Facade):将复杂系统内部的子系统与客户端进行解耦它侧重简化接口,更多的是一种架构模式
  • 享元模式(Flyweight):解决的是由大量细粒度对象的内存开销问题,与Facade模式相反,它关注的是重点是细小的对象
  • 代理模式(Proxy):对其它对象提供间接访问一个对象,它通过增加间接层来简化复杂的问题

行为型模式:负责处理对象间信息交互和职责分配

  • 职责链模式(Chain Of Responsibility):允许多个类处理同一个对象,而不需要知道彼此的功能,类之间的唯一联系是相互传递的请求
  • 命令模式(Command):把申请特定操作的请求封装到一个对象中,并给对象一个公开的接口
  • 解释器模式(Interpreter):定义语言的语法,并建立一个解释器来解释该语言中的句子
  • 迭代器模式(Iterator):提供一种方式可以连续地访问几个对象的所有元素而无须关注内在描述方式
  • 中介者模式(Mediator):用一个中介对象封闭一系列的对象交互,在中间加入一个"中介"对象,使两边的对象分别和"中介"对象引用或依赖
  • 备忘录模式(Memento):在不破坏封装性的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态
  • 观察者模式(Observer):定义了一个改动通知到多个对象的方式
  • 状态模式(State):允许一个对象在其内部发生修改时修改它的行为
  • 策略模式(Strategy):将算法封闭在一个类中,让算法独立于使用算法的客户端
  • 模板方法模式(Template Methor):提供一个算法的抽象定义。在一个方法里定义算法的骨架,将一些步骤延迟到其子类上
  • 访问者模式(Visitor):在不改变类的情况下,给一个类增加多种操作
 
设计模式是软件开发和设计的基础,具有语言无关性
 
(一个返回集合的方法,最好不要返回null,最好返回一个空的,个数为0的集合)
 

企业应用架构模式

企业级开发一个成功系统的标准:可靠性(Reliability),灵活性(Flexibility),重用性(Reusability),可维护性(Maintaninability)。 (RFRM)
1.分层模式:分解复杂的系统,层次间相互关联
2.业务逻辑设计模式
  • Transaction Script:事务脚本模式
  • Active Record:活动记录
  • Domain Model:领域模型是对现实领域对象进行抽象和提炼

3.对象关系映射

  • Unit Of Work:工作单元
  • Reponsitory:资源库,用来协调领域和数据映射层
  • DataMapper:数据映射,指把原先的数据取出来复制成一个对象
  • Identity Map:标识映射,通过标识保存已经加载的对象
  • Lazy Load:延时加载,真正有需要使用对象时,才去加载该对象
  • Query Object:查询对象
4.表现模式
  • MVP
  • MVC
  • MVVM
  • Font Controller
  • Page Controller
5.基本模式
  • Layer Supertype:层超类型