软件设计遵循七大设计原则,应用与软件的设计,可提高软件可维护性的复用
软件设计的来源“四人组”1994年发表23种常用的软件设计模式,旨在用模式来统一沟通面向对象设计在分析,设计,实现的鸿沟
设计模式定义:是一套被重复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。目的:使用设计模式是为了提高代码的可重用性,便于他人理解,提高代码的可靠性
设计模式根据目的分类(干什么的)三类:创建型(主要用于创建对象),结构型(主要用于处理类和对象的组合),行为型(主要描述类或者对象如何交互和如何分配职责)
根据范围:类模式(处理类与子类之间的关系,继承关系,静态),对象模式(对象之间的关系,运行时,动态)
面向对象设计的原则概述:可维护性复用。有七大原则:
单一职责:一个对象只负责一个职责,并且该职责被完整的封装在一个类中
开闭原则:软件实体对扩展开放,修改关闭
里氏代换:所有引用基类的地方必须能透明的使用其子类
依赖倒转:高层模块不依赖底层,应该依赖抽象,抽象不依赖具体
接口隔离:客户端不应该依赖哪些不需要的接口
合成复用:优先使用对象组合,而不是继承达到复用的目的
迪米特法则:每个软件单位对其他的软件单位只有最少的知识,局限于密切相关的单位。
创建型:对象的创建和使用分离,符合单一职责原则
简单工厂模式:传入一个参数还回一个对象,有相同的父类
实例:电视机简单传入参数,登录的权限管理
优点:实现了对象的创建和使用的分离,客户端不需要知道类名,只需要知道传的参数,引入配置文件提高灵活性
缺点:集中了所有的创建逻辑,指责过重,新增时类个数增加,系统扩展困难,无法形成继承的等级结构
使用情况(类少,客户端传参数)
工厂方法模式定义:父类定义公共接口,子类具体实现,将对象的实例延迟到子类
实例:电视机工厂,日记记录器(文件记录,数据库记录)
优点:客户隐藏了具体实例的细节,由工厂自主确定创建实例,新增工厂符合开闭原则
缺点:系统类个数成对增加,增加系统抽象性和理解难度
使用情况:客户端不知道创建类,由抽象工厂具体创建产品类
抽象工厂模式定义:提供一个创建一系列相关或相互依赖的接口,无需指定它们具体的类
实例:电器工厂(电视,洗衣机,空调,等级结构)数据库操作工厂
优点:客户端不知道具体类的实现,当产品族一起实现,使用相同产品族的对象,新增产品族,符合开闭原则
缺点:增加产品族麻烦
建造者模式定义:将复杂对象的构建与表示分离,相同的构建过程具有不同的表示;一步一步创建,客户端只知道类型与内容,不知道具体的构建细节
实例:肯德基套餐(主食,饮品(可乐,果汁))
优点:不知道具体创建细节;具体的建造者相互独立,新增符合开闭;更加精细的控制建造细节
缺点:差异性大不适宜使用,产品内部变化,具体建造者类变化太大,系统难度增大
使用情况:产品内部复杂;生成的产品属性相互依赖;创建过程在指挥者中;隔离复杂对象的创建与使用
原型模式:复制原型创建新对象
实例:邮件复制(浅克隆,深克隆(附件))
优点:创建对象简化,提高效率;扩展性好;简化创建结构;保存状态
缺点;每个类都要装配克隆方法,深克隆代码复杂
使用情况:创建新对象成本大;保存状态(小);避免分层工程类创建分层对象
单例模式定义:一个类只能有一个实例;自行创建实例;自行提供整个系统使用
实例:身份证号码,打印池
优点:提供唯一的访问授权;系统资源节约;允许可变数量实例(多例类)
缺点:扩展困难(无抽象层),职责过重,自动回收机制
使用情况:只允许创建一个对象,一个公共访问点。