一、设计模式概念
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用
二、设计模式的分类
- 创建型模式
用于描述 “怎么创建对象”,主要把对象的创建和使用分离,包括单例、原型、工厂、抽象工厂、建造者
- 结构性模式
用户描述如何将类或者对象组成更大的结构,代理、适配器、桥接、装饰、外观、享元、组合
- 行为型模式
用于描述类和对象之间怎么互相完成单个对象无法完成的任务,包括模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器
三、UML
统一建模语言,用来设计软件的可视化建模语言,包括用例图、类图、对象图、活动图、时序图、状态图、协作图、构件图、部署图9中图,其中类图是显示模型的静态结构图、特别是模型中存在的类、类的内部结构以及他们与其它类的关系。设计模式中使用类图能更见可观的认识设计模式
四、类图的表示方式
1、类的表示
在uml图中,类使用包含类型、属性、方法且带有分割线的矩形表示,如下一个Person类图,包含name、age2个属性一级work方法
属性或方法前的加减号表示属性、方法的可见性
-:表示price
+:表示public
#:表示protected
属性完整表示方式:可见性 名称 :类型 [-缺省值]
方法完整表示方式:可见性 名称 (参数泪飙):返回类型
2、类之间的关系表示
关联关系可以表示类和另一个类对象之间的联系、比如老师和学生、丈夫和妻子等。分为一般关联关系、聚合关系、和组合关系
2.1、一般关系
一般关系可以分为单向关联、双向关联、自关联
单向关联
类图中用一条带箭头的实线表示,如下每个user都有一个身份证,这通过user类持有一个类型为card的成员变量类实现
双向关联
用一个不带箭头的直线表示双方各自持有对方类型的成员变量,如下user持有一个List<Teacher>,表示每个user可以有多个老师,在teacher中持有一个List<user>表示一个老师有多个学员
自关联
用一个带有箭头且指向自身的先表示,如下表示Node类包含类型为Node的成员变量
2.2、聚合关系
2.3、 组合关系
2.4、依赖关系
2.5、继承关系
2.6、实现关系
五、软件设计原则
为了是程序的扩展性好、易于维护和升级,程序猿要尽量根据6条原则来开发程序
1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进⾏拓展的时候,不能去修改原有的代码,实现⼀个热插拔的效果。 所以⼀句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使⽤接⼝和抽象类,后⾯的具 体设计中我们会提到这点。
2、⾥⽒代换原则(Liskov Substitution Principle) ⾥⽒代换原则(Liskov Substitution Principle LSP)⾯向对象设计的基本原则之⼀。 ⾥⽒代换原则中说,任何基类 可以出现的地⽅,⼦类⼀定可以出现。 LSP是继承复⽤的基⽯,只有当衍⽣类可以替换掉基类,软件单位的功能不受到影响时, 基类才能真正被复⽤,⽽衍⽣类也能够在基类的基础上增加新的⾏为。⾥⽒代换原则是对“开-闭”原则的补充。实现“开-闭”原则 的关键步骤就是抽象化。⽽基类与⼦类的继承关系就是抽象化的具体实现,所以⾥⽒代换原则是对实现抽象化的具体步骤的规 范。—— From Baidu 百科
3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,
具体内容:针对接⼝编程,依赖于抽象⽽不依赖于具体。
4、接⼝隔离原则(Interface Segregation Principle) 这个原则的意思是:使⽤多个隔离的接⼝,⽐使⽤单个接⼝要好。还是⼀个降低类之间的耦合度的意思,从这⼉我们看出, 其实设计模式就是⼀个软件的设计思想,从⼤型软件架构出发,为了升级和维护⽅便。所以上⽂中多次出现:降低依赖,降低耦 合。
5、迪⽶特法则(最少知道原则)(Demeter Principle) 为什么叫最少知道原则,就是说:⼀个实体应当尽量少的与其他实体之间发⽣相互作⽤,使得系统功能模块相对独⽴。
6、合成复⽤原则(Composite Reuse Principle) 原则是尽量使⽤合成/聚合的⽅式,⽽不是使⽤继承