首页 > 代码库 > 课堂作业06——设计模式综述
课堂作业06——设计模式综述
设计模式综述
1.简单工厂模式
简单工厂模式中,有一个专门负责创建其他实例的类——工厂类,这个类可以动态地调用需要的类来完成相应的功能,只要传入一个正确参数即可。就像用户想要水果,但并不需要知道水果是如何创建的。
2.工厂方法模式
与简单工厂不同的是,工厂方法模式将工厂类负责的创建功能交给子类去做,因而增加了接口功能,将重点放在具体的类上。此模式的优点是方便增加功能,更加注重创建对象的细节,但缺点是类的个数会增加,使代码更不容易理解。
3.抽象工厂模式
抽象工厂模式是工厂方法的泛化版,这个工厂可以生产多个产品。用户并不需要知道什么被创建,如果需要改动只需改动工厂实例,并实现了高内聚低耦合的设计目的,这种模式有着广泛的应用。缺点是添加新产品时比较困难。
4.建造者模式
建造者模式可以一步一步地创建一个复杂的对象,即含有多个成员属性的对象。用户可以通过说明复杂对象的类型的内容就可以实现对象的构建,无需知道构建的具体细节。缺点是不适合差异性较大的产品,系统会变得庞大。
5.原型模式
此模式功能类似复制—粘贴,可以通过复制原型创建新的对象。这种克隆方式体现在很多软件的功能中,有深克隆和浅克隆之分,区别在于是否复制引用的对象。这种模式可以简化对象的创建,保存对象状态。缺点是违背了“开闭原则”。
6.单例模式
为了使系统中的实例能够唯一存在,可以使用单例模式,确保每一个类只有一个实例。使用单例类提供能够全局访问的方法,因为只存在一个对象,所以可以节约系统资源。但是这种模式很难扩展,也违背了“单一职责原则”。
7.适配器模式
以上是对象型模式,适配器模式是结构型模式,将类或对象结合在一起成一个更大的结构。
适配器模式提供用户希望的接口,使不兼容的类可以共同工作。可分为类适配器和对象适配器,这种模式将目标类与适配器类分离,无须改变原有代码,增加了代码的灵活性和扩展性,符合“开闭原则”。
8.桥接模式
桥接模式将实现部分单独分离出来,使他们可以独立地进行一些改动,就像它的名称一样,此模式存在一条连接两个继承者的“桥”。可以作为实现架构的一种方式——此模式分离抽象接口及其实现部分,对用户隐藏实现细节,但会增加代码设计难度,使用范围有限。
9.组合模式
这是一个能够表示“整体与部分”、具有层次结构的模式,把对象组织到树形结构,有叶子对象和容器对象,更容易在组合中加入对象。但并不适用于所有方法,业务规则也很抽象。
10. 装饰模式
装饰模式的特点之一:在不改变一个对象本身的基础上给对象增加额外的新行为。比生成子类的方式更加灵活,有原始状态和抽象类,可以动态地扩展一个对象的功能,但实现时容易出错。
11. 外观模式
简化用户与对象的交互过程——外观模式提供一个一致的界面、统一的外观对象实现外部与子系统进行通信,符合“迪米特法则”,不满足“开闭原则”。能够实现子系统与客户之间的松耦合,使子系统使用起来更加方便,但不能限制客户使用子系统类。
12. 享元模式
在面向对象的思想中,如果遇到对象相似且数目庞大时,就可以使用享元模式实现这些对象的复用(通过享元工厂类和一个享元池),此模式极大地减少了内存的对象数量,但同时系统也会变得更加复杂。
13. 代理模式
在本地与远程的方法调用中,可以设置本地的代理,起到中介的作用,还可以去掉客户不能看到的内容或增加额外服务。减少系统资源消耗,同时也会提高运行速度,但实现起来会很复杂。
14. 职责链模式
以下模式是行为型创建模式,是对不同对象之间划分责任和算法的抽象化。
在处理某个请求的对象不止一个时,设置请求发送者和接收者,使多个对象都能收到请求,可以按照某种关系将这些对象联成一条链,并沿着这条链传递请求。但链不能过长。
15. 命令模式
向某些对象发送请求时并不知道请求的接受者或被请求的操作是什么,而命令模式可以使发送者与接受者完全解耦,两者之间没有直接的引用关系,新的命令可以很容易地加入到系统中,但可能会导致系统中含更多的具体命令类。
16. 解释器模式
为描述一些具体的特定类型,可以使用解释器模式创建一个新的语言。定义一个新的语言文法用解释器来解释由语言组成的句子,这就是解释器模式的功能体现。这种功能可以扩展文法但难以维护,执行效率低。
17. 迭代器模式
实现在不暴露内部结构的基础上访问它的元素是很重要的,而迭代器模式实现了一种功能——提供一个方法来访问聚合对象(负责存储、遍历内部对象)。这种方式满足“开闭原则”,但会使类的个数增加。
18. 中介者模式
有时软件中需要一个中间对象来降低类与类或对象与对象之间的耦合关系,中介者模式使用中介对象封装一系列的对象交互功能,减少了子类的生成。但会导致具体中介者类非常复杂,系统难以维护。
19. 备忘录模式
就像我们平时使用的备忘录,将用户的每一次操作都记录下来,以防出现误操作,可以调出历史状态恢复到正确的状态,这个过程是在不破坏封装的前提下完成的,使用户更方便地进行使用,但对资源消耗过大。
20. 观察者模式
就像数据库里的触发器,当对象之间存在依赖关系时,一个对象的变化会引起依赖对象发生变化。观察者模式就可以实现这样的功能,建立对象之间的依赖关系,实现“观察”功能。但会浪费时间,同时要避免循环依赖关系。
21. 状态模式
一个对象的内部状态改变时改变它的行为,这就是状态模式的定义。模式中列举了很多可能的个状态,还设置了可以共享的对象。但此模式会增加类的对象,不完全支持“开闭原则”。
22. 策略模式
一项任务会有不同的解决方式,策略模式提供了封装的一系列算法,这些算法能够独立地变化,也是对“开闭原则”的完美支持,但策略算法只适用于客户端知道所有的算法或行为的情况。
23. 模板方法模式
模板方法模式是结构最简单的行为型模式,模式中定义了实现算法的骨架,在不改变子类算法的基础上重定义模板方法。是代码复用的基本技术,符合“开闭原则”,但会导致类的个数增加,系统变得庞大。
24. 访问者模式
为解决不同集合的对象(含存储了不同类型的元素)接受不同类不同方式的访问,访问者提供在不改变类的前提下定义一些新操作。访问者模式可以容易的增加新的访问操作,但增加新的元素类会很难,违背了“开闭原则”。
课堂作业06——设计模式综述