`

01设计模式前序

阅读更多
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

一、设计模式的分类

总体来说设计模式分为三大类:
    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:


二、设计模式的六大原则

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)
原则是尽量使用合成/聚合的方式,而不是使用继承。
  • 大小: 198 KB
分享到:
评论

相关推荐

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    这些是设计模式中的经典应用,对于理解和掌握面向对象编程中的复杂结构和操作有着重要的意义。 首先,让我们深入了解**组合模式**。它是一种结构型设计模式,允许我们创建部分-整体层次结构,使得客户代码可以一致...

    非递归前序遍历 数据结构

    在数据结构领域,遍历是访问或操作树形结构(如二叉树)...同时,这也是算法设计和分析的基础,有助于培养良好的编程习惯和思维模式。在实际项目中,根据具体需求选择合适的遍历方法,往往能提高代码的效率和可维护性。

    百度数据挖掘研发工程师实习笔试面试.doc

    在百度数据挖掘研发工程师的工作中,设计模式可以应用于解决数据挖掘和机器学习中的问题,例如使用工厂模式来生成不同的机器学习模型,或者使用观察者模式来监控数据的变化。 3.TCP中timewait的状态和应用场景: ...

    群硕软件公司的软件笔试试题

    群硕软件公司的笔试题目涵盖了多个IT领域的知识点,主要包括编程语言(Java、C++、C#)、操作系统(OS)、数据结构、面向对象编程、内存管理、设计模式和逻辑思维能力。以下是对这些知识点的详细说明: 1. **二叉树...

    CDIO模式下Java高级网站应用课程的设计与实现.pdf

    《CDIO模式下Java高级网站应用课程的设计与实现》是一篇关于高等教育中采用CDIO教育理念来改革Java高级网站应用课程的文章。CDIO代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate),这是一...

    频繁子树模式挖掘算法PrefixTreeESpan

    前序字符串在频繁子树挖掘过程中起到了关键作用,因为它能够用于表示树的结构特征,便于算法进行模式增长。 频繁子树挖掘的问题定义是:给定一个树数据库D和最小支持计数minsup,目标是找到所有支持计数不小于...

    Java_EE技术面试常见问题.doc

    Java EE技术面试常见问题主要涵盖了数据结构、算法、设计模式以及Java基础等多个方面,这些都是面试者需要深入理解和熟练掌握的核心技能。以下是对这些知识点的详细解释: 1. **数据结构**: - **链表**:链表是一...

    迅雷校园招聘笔试题(2010、2009)

    - 设计模式:工厂模式、单例模式、观察者模式等常见设计模式的理解和应用。 - UML建模:用例图、类图、序列图等图形表示方法。 7. **计算机系统基础**: - 计算机组成原理:CPU、内存、I/O设备的基本工作原理。 ...

    剑指offer算法题

    6. **设计模式**:虽然不是直接的算法问题,但部分题目会涉及设计模式的运用,比如“设计LRU缓存”涉及到设计模式中的双端队列和哈希表的结合。 通过学习和实践`OfferDemo`中的代码,你不仅能掌握具体算法的实现,...

    互联网大厂Java工程师岗位面试总结

    熟练掌握常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式等,能够灵活运用到实际项目中,展示良好的代码设计能力。 五、框架与中间件 对Spring、MyBatis等主流Java开发框架有深入理解,了解Spring ...

    微软校园招聘笔试题(9.22 第一次笔试).docx

    3. 设计模式:在软件工程中,"creational"设计模式关注对象的创建。Singleton模式是一种单例模式,确保类只有一个实例并提供全局访问点。Façade模式是结构型模式,用于简化接口;Bridge模式是用以分离抽象接口及其...

    java及java EE面试大全

    Java及Java EE面试大全主要涵盖了Java语言的基础知识、数据结构、算法、设计模式以及Java EE的相关概念。以下是对这些知识点的详细阐述: 1. **数据结构**: - **链表**:链表是一种线性数据结构,其中的元素不是...

    JAVA goodexamples

    6. **设计模式**:在JAVA中,设计模式是一种解决常见问题的最佳实践。例如,单例模式、工厂模式、观察者模式等,这些都是提升代码可读性和可维护性的关键。 通过学习这些算法案例,初学者可以逐步掌握如何在JAVA中...

    基于JAVA开发的二叉树课程设计与实现

    - 设计模式:如工厂模式用于创建不同类型的二叉树,装饰者模式用于扩展二叉树的功能。 - 测试:编写测试用例以验证二叉树操作的正确性。 - 文档规范:遵循一定的编码和注释规范,提高代码可读性。 通过这个项目...

    经典的面试题

    - **设计模式**:工厂模式、单例模式、观察者模式等常见设计模式的实现和使用场景。 通过深入理解和熟练掌握这些知识点,你将能够更自信地应对面试中的各种挑战。记得实践是检验理论的最好方式,尝试用所学的知识...

    2021-2022计算机二级等级考试试题及答案No.3324.docx

    这些题目涵盖了计算机二级等级考试中的多个知识点,包括数据结构、操作系统、数据库设计、编程语言(如Java和C)、办公软件(如PowerPoint和Word)以及软件设计模式等。以下是这些题目涉及的知识点详解: 1. **...

    亚马逊编程面试10道必备问题:真题介绍

    - 常见的设计模式如单例模式、工厂模式、观察者模式等,它们在实际工程中的应用是面试中常见的考察点。 6. **系统设计**: - 如何设计大规模系统的架构,考虑高可用性、可扩展性、容错性等。 - 负载均衡、分布式...

    程序设计的几个实验程序

    在程序设计领域,实验是学习和理解算法及数据结构的关键环节。这些实验旨在帮助开发者深入理解各种编程概念,提升问题解决能力。以下是标题和描述中提及的几个关键知识点的详细说明: 1. 堆排序(Heap Sort): 堆...

    LeetCode题目解答

    7. **设计模式**:虽然LeetCode主要关注算法和数据结构,但某些题目可能涉及设计模式,如工厂模式、观察者模式、装饰器模式等。熟悉这些模式可以帮助你构建更优雅的解决方案。 8. **语言特性**:LeetCode支持多种...

Global site tag (gtag.js) - Google Analytics