Java设计模式(一)

lshaoyu 2018-12-20 原文

Java设计模式(一)

1、什么是设计模式?

在软件工程中,设计模式是对软件设计中普遍存在的各种问题,所提出的 解决方案

换句话说,设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计的 经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。

设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

个人理解:设计模式就是一种解决问题的方案,套路。

2、设计模式原则

  1、开闭原则(Open Close Principle)

    开闭原则的意思是:对扩展开放,对修改封闭。在程序需要进行扩展的时候,不能去修改或影响原有的代码,实现一个热插拔的效果。

  简言之,是为了使程序的扩展性更好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

  个人理解:你可以画猫,但不能画的像狗。

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

    里氏代换原则是面向对象设计的基本原则之一。

   里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当子类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而且子类也能够在基类的基础上增加新的行为。

  里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

  个人理解:老爸能做的,儿子也可以。

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

    这个原则是开闭原则的基础,核心内容:针对接口编程,高层模块不应该依赖底层模块,二者都应该依赖抽象而不依赖于具体。

  个人理解:老爸能做的,儿子也可以。

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

           这个原则的意思是:使用多个隔离的接口,比使用单个庞大的接口要好。其目的在于降低耦合度。由此可见,其实设计模式就是从大型软件架构出发,便于升级和维护软件的设计思想。它强调低依赖、低耦合。

  个人理解:定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。

  5、单一职责原则(Single Responsibility Principle)

    类的职责要单一,不能将太多的职责放在一个类中。

    可能有的人会觉得单一职责原则和前面的接口隔离原则很相似,其实不然。其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要约束的是类,其次才是接口和方法,它针对的是程序中的实现和细节;  而接口隔离原则主要约束接口,主要针对抽象,针对程序整体框架的构建。

  个人理解:还是模块化,人各有分工,自己做自己的事情就行。

  6、最少知道原则(Demeter Principle)

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

  一个对象应该对其他对象保持最少的了解。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个  方法的话,可以通过第三者转发这个调用。所以在类的设计上,每一个类都应当尽量降低成员的访问权限。

  个人理解:不要和陌生人说话,即一个对象应对其他对象有尽可能少的了解,话越多越容易暴漏自己。

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

    合成复用原则就是在一个新的对象里通过关联关系(组合关系、聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简而言之,尽量多使用 组合/聚合 的方式,尽量少使用甚至不使  用继承关系。

  个人理解:功能复用?模块复用?对象复用?

 

 

posted on 2018-12-20 14:35 就爱上编程吧 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为lshaoyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lshaoyu/p/10149193.html

Java设计模式(一)的更多相关文章

  1. ThreadLocal的使用场景分析

    目录 一.ThreadLocal介绍 二.使用场景1——数据库事务问题   2.1 问题背景   2.2 方案 […]...

  2. 结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍

    Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现。 变更日志 创 […]...

  3. java 容器类大集结

    这个世界是程序员的世界,归根到底是数据的世界,要统治这个世界,首先要学会征服数据。 没有最好的,只有最合适的, […]...

  4. Java 反射原理

    一、Java 反射的定义 反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于 […]...

  5. Mybatis Plugin(拦截器)的开发

    1.Plugin   MyBatis 允许使用插件来拦截的方法调用包括: • Executor (update […]...

  6. 微服务SpringCloud之熔断监控Hystrix Dashboard和Turbine

    Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashbo […]...

  7. Nifi组件脚本开发—ExecuteScript 使用指南(一)

    Part 1 – 介绍 NiFi API 和 FlowFiles   ExecuteScript […]...

  8. 字节跳动Java研发面试99题(含答案):JVM+Spring+MySQL+线程池+锁

    JVM的内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 […]...

随机推荐

  1. 保存分区表时出现错误(0000000001)函数不正确 – zno2

    保存分区表时出现错误(0000000001)函数不正确 进入Windows PE  —— 打开diskgeni […]...

  2. Python 博客园备份迁移脚本

    鉴于有些小伙伴在寻找博客园迁移到个人博客的方案,本人针对博客园实现了一个自动备份脚本,可以快速将博客园中自己的文章备份成Markdown格式的独立文件,备份后的md文件可以直接放入到hexo博客中,快速生成自己的站点,而不需要自己逐篇文章...

  3. php备忘

    所需包https://pan.baidu.com/s/1Rr6uql5sGkZzqJJ9cXC6-g?pwd=8p5h tar zxvf oniguruma-6.9.4.tar.gz./autogen.sh ./configure...

  4. C# 调用百度api接口获取节假日

    百度接口api:https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/ […]...

  5. C# 6新特性简单总结

      最近在看《C#高级编程 C# 6&.NET Core 1.0》,会做一些读书笔记,也算对知识的总结 […]...

  6. svn客户端使用  一、客户端SVN安装。

     1.下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包 […]...

  7. jQuery页面刷新(局部、全部)问题分析

    jQuery页面刷新(局部、全部)问题分析 本文实例分两部分对jquery刷新问题进行介绍,第一部分介绍了呢页 […]...

  8. 网络安全服务人才发展路线图

    IDC预测,到2023年,全球网络安全支出规模将达到1512亿美元(约合10640.4亿元人民币),并将以9. […]...

展开目录

目录导航