软件设计遵循七大设计原则,应用与软件的设计,可提高软件可维护性的复用

软件设计的来源“四人组”1994年发表23种常用的软件设计模式,旨在用模式来统一沟通面向对象设计在分析,设计,实现的鸿沟

 

设计模式定义:是一套被重复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。目的:使用设计模式是为了提高代码的可重用性,便于他人理解,提高代码的可靠性

设计模式根据目的分类(干什么的)三类:创建型(主要用于创建对象),结构型(主要用于处理类和对象的组合),行为型(主要描述类或者对象如何交互和如何分配职责)

根据范围:类模式(处理类与子类之间的关系,继承关系,静态),对象模式(对象之间的关系,运行时,动态)

面向对象设计的原则概述:可维护性复用。有七大原则:

单一职责:一个对象只负责一个职责,并且该职责被完整的封装在一个类中

开闭原则:软件实体对扩展开放,修改关闭

里氏代换:所有引用基类的地方必须能透明的使用其子类

依赖倒转:高层模块不依赖底层,应该依赖抽象,抽象不依赖具体

接口隔离:客户端不应该依赖哪些不需要的接口

合成复用:优先使用对象组合,而不是继承达到复用的目的

迪米特法则:每个软件单位对其他的软件单位只有最少的知识,局限于密切相关的单位。

 

创建型:对象的创建和使用分离,符合单一职责原则

简单工厂模式:传入一个参数还回一个对象,有相同的父类

 实例:电视机简单传入参数,登录的权限管理

优点:实现了对象的创建和使用的分离,客户端不需要知道类名,只需要知道传的参数,引入配置文件提高灵活性

缺点:集中了所有的创建逻辑,指责过重,新增时类个数增加,系统扩展困难,无法形成继承的等级结构

使用情况(类少,客户端传参数)

工厂方法模式定义:父类定义公共接口,子类具体实现,将对象的实例延迟到子类

实例:电视机工厂,日记记录器(文件记录,数据库记录)

优点:客户隐藏了具体实例的细节,由工厂自主确定创建实例,新增工厂符合开闭原则

缺点:系统类个数成对增加,增加系统抽象性和理解难度

使用情况:客户端不知道创建类,由抽象工厂具体创建产品类

抽象工厂模式定义:提供一个创建一系列相关或相互依赖的接口,无需指定它们具体的类

 实例:电器工厂(电视,洗衣机,空调,等级结构)数据库操作工厂

优点:客户端不知道具体类的实现,当产品族一起实现,使用相同产品族的对象,新增产品族,符合开闭原则

缺点:增加产品族麻烦

建造者模式定义:将复杂对象的构建与表示分离,相同的构建过程具有不同的表示;一步一步创建,客户端只知道类型与内容,不知道具体的构建细节

 实例:肯德基套餐(主食,饮品(可乐,果汁))

优点:不知道具体创建细节;具体的建造者相互独立,新增符合开闭;更加精细的控制建造细节

缺点:差异性大不适宜使用,产品内部变化,具体建造者类变化太大,系统难度增大

使用情况:产品内部复杂;生成的产品属性相互依赖;创建过程在指挥者中;隔离复杂对象的创建与使用

原型模式:复制原型创建新对象

 实例:邮件复制(浅克隆,深克隆(附件))

优点:创建对象简化,提高效率;扩展性好;简化创建结构;保存状态

缺点;每个类都要装配克隆方法,深克隆代码复杂

使用情况:创建新对象成本大;保存状态(小);避免分层工程类创建分层对象

单例模式定义:一个类只能有一个实例;自行创建实例;自行提供整个系统使用

 实例:身份证号码,打印池

优点:提供唯一的访问授权;系统资源节约;允许可变数量实例(多例类)

缺点:扩展困难(无抽象层),职责过重,自动回收机制

使用情况:只允许创建一个对象,一个公共访问点。