JAVA设计模式---总述篇

一、设计模式(Design Pattern)

  1.设计模式的概念  

    是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

   2.学习设计模式的意义

   设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。正确使用设计模式具有以下优点:

  • 可以提高程序员的思维能力、编程能力和设计能力。
  • 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

二、设计模式分类

JAVA中的设计模式总共有23种,一共可以分为三类: 

  创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

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

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

  其实还有两类:并发型模式和线程池模式。

三、设计模式的六大原则:

  总原则-开闭原则

    对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码。一句话概括就是:为了使程序的扩展性好,易于维护和升级。

  1、单一职责原则

    不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分

  2、里氏替换原则(Liskov Substitution Principle)

    里氏替换原则(Liskov Substitution Principle LSP)是面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

  3、依赖倒转原则(Dependence Inversion Principle)

    面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

  4、接口隔离原则(Interface Segregation Principle)

    每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

  5、迪米特法则(最少知道原则)(Demeter Principle)

    为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

  6、合成复用原则(Composite Reuse Principle)

    原则是尽量使用合成/聚合的方式,而不是使用继承。

四、写在最后

  本篇是对JAVA中的设计模式的分类和原则做了一个大体的介绍,在后续的博文中,会陆续介绍每一种设计模式的具体实现,欢迎大家关注、订阅。

  

  

原文地址:https://www.cnblogs.com/shi-zhe/p/11600137.html

时间: 2024-10-12 12:51:33

JAVA设计模式---总述篇的相关文章

设计模式之总述篇

以下是对<Head First 设计模式>中提到的OO原则和设计模式的总结. OO原则和设计模式的联系:模式可以让我们建造出具有良好OO设计质量的系统.模式被认为是历经验证的OO设计经验. OO设计原则: 1.封装变化:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起: 2.多用组合,少用继承:良好的OO设计必须具备可复用.可扩充.可维护三个特性. 3.针对接口编程,而不是针对实现编程:"针对接口编程"真正的意思是"针对超类型(sup

Java 之设计模式(总述)

1. 面向对象设计原则 单一职责原则: 一个类只负责一个功能领域中的相应职责 开闭原则: 软件实体应对扩展开放,而对修改关闭; 里氏代换原则: 所有引用基类对象的地方能够透明地使用其子类的对象; 依赖倒转原则: 抽象不应该依赖于细节,细节应该依赖于抽象; 接口隔离原则: 使用多个专门的接口,而不使用单一的总接口; 合成复用原则: 尽量使用对象组合,而不是继承来达到复用的目的; 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用; 2. 软件模式的基础结构包括四部分: 问题描述(待解决

【Java设计模式】1.单例模式

写在前面 Java设计模式总共有23种,虽然我也没仔细数.单例模式,好像在常用的Java项目中必不可少吧,好比是做米饭绝对少不了米,没毛病.这里谈谈自己的理解吧,大致分为几个方面: 1.哪些时候需要用到单例模式,即单例模式的使用场景,谈谈Singleton Mode的概念 2.常见有哪几种单例模式 3.单例模式的好处 4.单例模式和线程安全的那些事儿 1.0 什么时候需要单例模式 1.1 定义 单例模式,是一种创建对象的设计模式,单例模式确保其某一个类只有一个实例,即:它要确保整个类有且只有一个

关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的.但是现实情况是像淘宝.京东这样的大型动态网站在承担高并发的情况下任然能保证快速的响应,这其中有什么样的技术手段可以达到动态网站支撑高并发的场景了,这也许是每个做web开发的朋友都很感兴趣的问题,今天我将写一个新的系列来探讨下这个问题,希望我的经验和研究能给大多数人

JAVA设计模式总结之六大设计原则

从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇看完,脑子里面已经能够对绝大多数的设计模式能够说出其核心思想且可以画出类图也知道应用场景,算是一个进步,但可能还不能够特别熟练的使用,可能需要多多巩固和强化使用才能够完全理解设计模式的精髓所在.学习期间收获还是不少的: 1.从只听过设计模式到学习了所有的设计模式,并写了不少设计模式的博客,在公司期间

【转】关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的.但是现实情况是像淘宝.京东这样的大型动态网站在承担高并发的情况下任然能保证快速的响应,这其中有什么样的技术手段可以达到动态网站支撑高并发的场景了,这也许是每个做web开发的朋友都很感兴趣的问题,今天我将写一个新的系列来探讨下这个问题,希望我的经验和研究能给大多数人

Java设计模式(六)合成模式 享元模式

(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象可以是容器对象,也可以是单对象.组对象允许包含单对象,也可以包含其他组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 保证客户端调用单对象与组合对象的一致性. class TreeNode{ private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();

java设计模式--基础思想总结1

看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地总结设计模式学习过程中的一些心得体会,这篇作是个人理解设计模式中的一些核心思想的简单总结,但是也是我认为在设计模式中最核心的部分思想了. 一.软件工程的设计尝试 软件工程的一些要求.在软件工程中,最基本的要求便是可重用行以及扩展性,前者要求系统的设计在代码层面可以有良好的组织结构以便公共代码可以一次

java设计模式(2)------DAO模式

java设计模式(2) 一.DAO模式 1.在java程序中,经常需要把数据永久化,或者需要获取永久化的数据,但是在这类过程中会有很多的问题出现,例如:数据源不同,存储类型不同,供应商不同.访问方式不同等,使用DAO模式能够以统一的接口进行数据持久化操. 2.解决方案: 3.DAO的理解 ①.DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路. ②.DAO理论上是没有层数限制的. ③.DAO的各层理论上是没有先后的. 4.DAO模式的本质是一层屏蔽一种变化.