设计模式主要包含三个部分:场景(上下文)、问题、解决方案。
设计模式包含五个要素:名称、环境、问题、解决方案、效果。
模式可以分为创建型、结构型、行为型三种。
可扩展性是由开闭
原则、里氏代换原则、依赖倒转原则和组合
/聚合复用原则所保证
几个原则的分析:
-
开闭原则:“Software entities should be open for extension,but closed for
modification”。对扩展开放、对修改关闭。目标是做到不修改现有代码的基础上,扩展系统的功能。实现开闭原则的关键是“抽象”,对系统的行为进行尽可能的抽象,使得抽象层可以对应一个或多个具体的行为实现。
-
里氏代换原则(LSP):“Subtypes must be substitutable for their base types”,也即子类必须可替换他们的基类,替换之后,系统的功能没有发生改变。该原则是研究继承的原则:如果实现的继承关系不满足该原则,则该关系不成立。相关的实例有:正方形不是长方形,鸵鸟不是鸟等。对第一个实例,可考虑将设置长度、宽度的方法合并成一个方法。对于第一个实例,可考虑改进鸟类的设计:可参考Head Frist design pattern。
-
依赖倒置原则:目的在改变传统的过程化设计方法中,高层次模块依赖低层次模块,抽象层依赖于具体层的方式。依赖倒置目的即将该方式进行倒转。抽象不应该依赖于细节,也即“需要针对接口编程”。接口是实现插件化的关键,提升系统的灵活性。
-
组合聚合复用原则:“
Favor object composition over class
inheritance”,尽量使用组合聚合,而不是继承。基于面向对象编程,依赖于抽象而不是具体的原则,假定类A的功能在新的B类中需要使用,可选择两种方式:1)使得A成为B的一部分(组合聚合方式);2)使得B继承于A。如果A本身没有进行相应的抽象,则方法2就带来了依赖和耦合的问题。
单例模式:其典型实现有第一次调用实例化和类加载就实例化两种差别。
装饰模式:动态给对象添加一些额外的职责,例如JAVA IO API 就是采用了该模式。
适配器模式:对类的接口进行变换,使得原本不匹配的两者之间能一起工作。在生产系统中,广泛采用的工作流相关的entryadapter,forwardadapter等。
模板模式:设计一个抽象类,将部分逻辑以具体方法的形式实现,同时申明一些抽象方法迫使子类实现剩余的逻辑。这样,子类可以替换父类的可变部分,但改变不了模板方法所代表的顶级逻辑。
门面模式:外部与子系统的通信,必须通过一个统一的门面对象进行。这样可以简化子系统的接口同时提升子系统的独立性和可
代理模式:给原始对象提供一个代理,由代理类来控制对原对象的引用。(代理和门面的差别是:代理目的是控制原对象的引用,门面目的是提供统一的接口,一般来说,门面会需要统筹多个功能对象)。
分享到:
相关推荐
设计模式笔记,欢迎交流,QQ:250175280
好东西一定得分享,自己现阶段需要好好学习一下QT。C++设计模式--基于Qt4开源跨平台开发框架 完整清晰版中文PDF。好东西而且分数不贵!解压密码qt。
免费提供个人设计模式简易代码,代码结构层次清晰,并且内含基本所有的注释,非常有利于初学者学习设计模式
C#语法,数据库实例,设计模式----学习C#的必备资料,一应俱全!
Java设计模式-图解-附代码-学习好资料.doc
学习设计模式的资料,书中阐述了作者对设计模式的理解以及在程序设计中遇到问题该用什么样的模式去解决。
然而学习设计模式的过程却是痛苦的,从阅读设计模式的圣经——GoF的《设计模式:可复用面向对象软件的基础》时的枯燥、苦闷、茫无头绪,到有一天突然有一种顿悟;自己去实现GoF的23中模式时候的知其然不知其所以然,...
设计模式-简单工厂模式-披萨店C#语言版 如有学习讨论意向请联系我吧~ hzher@qq.com
设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
设计模式---文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
学习-学习平台-学习平台源码-学习平台java代码-学习平台设计与实现-基于springboot的学习平台-基于Web的学习平台设计与实现-学习网站-学习网站源码-学习网站java代码-学习项目-学习项目代码-学习系统-学习系统源码-...
设计模式-单例模式 学习时候联系的代码,可以进行参考
koajs-design-note:《 Koa.js设计模式-学习笔记》已完结:grinning_squinting_face:
PHP设计模式--文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
《C++20设计模式》学习笔记-第8章组合模式-配套学习代码