JAVA设计模式——概述

**设计模式(Design pattern)**是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理地运用设计模式可以完美地解决很多问题。

设计模式的六大原则

1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立

6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

23种设计模式的分类

  • 创建型模式
    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
  • 结构型模式
    这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
  • 行为型模式
    这些设计模式特别关注对象之间的通信。

下面提供一个具体分类表格(点击连接可跳转到相应的文章):

分类模式
创建型模式工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 单例模式(Singleton Pattern) 原型模式(Prototype Pattern)
结构型模式适配器模式(Adapter Pattern) 装饰模式(Decorator Pattern) 代理模式(Proxy Pattern) 外观模式(Facade Pattern) 桥接模式(Bridge Pattern) 组合模式(Composite Pattern) 享元模式(Flyweight Pattern)
行为型模式策略模式(Strategy Pattern) 模板方法模式(Template Pattern) 观察者模式(Observer Pattern) 迭代子模式(Iterator Pattern) 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 备忘录模式(Memento Pattern) 状态模式(State Pattern) 访问者模式(Visitor Pattern) 中介者模式(Mediator Pattern) 解析器模式(Interpreter Pattern)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yb3防爆电机型号含义_yb3防爆电机型号含义有哪些?

YB3防爆电机型号中包含了这个系列电机的一些相对信息,每个电机都有其型号系列,将它们的功用功能规格参数进行相应的分隔,防爆电机的的型号系列也可以说是防爆电机的技能综合证,防爆电机有了它的型号系列更能找到它的适用场所。YB3系列的防爆电机的系列含义如下YB3系列防爆电机是…

网站服务器怎么用手机登录不了怎么办,怎么打不开服务器列表了?

2011-04-19网页图片打不开是不是中毒呢?以前网页中没有图片、视频、动画、声音。打开IE选工具/Internet选项/高级/在设置的下拉列表,勾选“播放网页中的动画”“播放网页中的声音”“播放网页中的视频”“显示图片”(也可以直接选择高级中下面的“还原默…

RedisTemplate常用集合使用说明(一)

在这里我使用的是spring-boot框架组合的redisTemplate的jar包spring-boot-starter-data-redis&#xff0c;采用POM的方式引入&#xff0c;引入代码如下: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent…

idea调试怎么跳出循环_IDEA调试技巧条件断点实现步骤详解

调试的时候&#xff0c;在循环里增加条件判断&#xff0c;可以极大的提高效率&#xff0c;心情也能愉悦。以下介绍下IDEA使用条件【Condition】断点的方法1、编写一段样例代码/*** author jiashubing* since 2017/11/13*/public class Test {public static void main(String[] …

RedisTemplate常用集合使用说明-opsForValue(二)

​ 基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了&#xff0c;现在我们直接介绍opsForValue()方法的使用&#xff1a; 1、set(K key, V value) ​ 新增一个字符串类型的值,key是键&#xff0c;value是值。 redisTemplate.opsForValue().set(&…

ur机械臂 控制器_OnRobot末端执行器和统一接口已通过UR +计划认证

近日&#xff0c;OnRobot 宣布其One System Solution末端执行器和统一接口现已通过UR 计划认证&#xff0c;UR 计划对夹具等配件进行测试和认证&#xff0c;以便与Universal Robots A / S协作机器人手臂无缝配合使用。OnRobot在9月份发布了全系列的机械手和传感器&#xff0c;具…

xp系统打印机服务器设置,WinXP打印机纸张规格设置的方法

电脑的打印机是我们常常会使用的外部输出设备&#xff0c;虽说经常在用&#xff0c;但是关于它的很多问题还是不会&#xff0c;比如说怎么对打印机纸张规格设置&#xff0c;那么当你遇到这个问题不会的话&#xff0c;那就赶紧看看小编整理的WinXP打印机纸张规格设置的方法吧&am…

RedisTemplate常用集合使用说明-opsForList(三)

​ 基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了&#xff0c;现在我们直接介绍opsForList()方法的使用&#xff1a; 1、leftPush(K key, V value) 在变量左边添加元素值。 redisTemplate.opsForList().leftPush("list","a&qu…

stm32的语音识别_基于stm32循迹避障语音控制金属探测蓝牙小车设计(原理图+pcb+源码+参考文档)...

功能描述及设计原理&#xff1a;小车具有检测里程功能&#xff0c;在金属探测模式&#xff0c;槽型光耦会检测小车车轮的圈数&#xff0c;以此来计算小车行走的里程&#xff0c;并可以通过OLED屏幕显示出来。还可以显示小车的工作模式以及小车距离前方障碍物的距离。》默认模式…

虚拟磁盘没有可用的合格服务器,VMware提示:没有更多空间可供虚拟磁盘***.vmdk使用 所引发的故障及处理...

Python - - - Pandas基本使用import pandas as pdimport numpy as npdef pandasWork1(): # DataFrame 初始化&#xff0c;与数据的获取one np.array([name0, name1, name2, name3, name4, name5])two list([[...Browser-sync安装与使用browser-sync启动命令Browsersync能让浏…

RedisTemplate常用集合使用说明-opsForHash(四)

基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了&#xff0c;现在我们直接介绍opsForHash()方法的使用&#xff1a; 1、put(H key, HK hashKey, HV value) 新增hashMap值。 redisTemplate.opsForHash().put("hashValue","map1&q…

发明喂饭机器人_人类又懒出新高度,老美发明自动喂饭机器人,“君子”动嘴不动手...

近年来&#xff0c;各式各样的智能机器人层出不穷&#xff0c;多数都是为了方便人们的日常生活。近日&#xff0c;美国一机器人公司&#xff0c;为残障人士和重症疾病患者设计了一款智能喂饭机器人&#xff1a;Obi。这款机器人拥有全白的外观&#xff0c;它的机械臂可以将饭菜直…

RedisTemplate常用集合使用说明-opsForSet(五)

基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了&#xff0c;现在我们直接介绍opsForSet()方法的使用&#xff1a; 1、add(K key, V… values) 向变量中批量添加值。 redisTemplate.opsForSet().add("setValue","A","…

中provide的用法_Vue中那些你不知道的作用域

作用域控制可以使用哪些变量以及在何处使用。它控制它们对应用程序的不同部分的“可见性”。了解 Vue 提供的作用域级别之间的差异会帮助我们编写更清晰的代码。下面是 vue 中4个级别的作用域&#xff1a;全局作用域子树作用域组件作用域实例作用域全局作用域Vue 应用程序中的全…

RedisTemplate常用集合使用说明-opsForZSet(六)

基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)]》中已经介绍了&#xff0c;现在我们直接介绍opsForZSet()方法的使用&#xff1a; 1、add(K key, V value, double score) 添加元素到变量中同时指定元素的分值。 redisTemplate.opsForZSet().add("zSetV…

树叶贴画机器人_洪山广场举办“落叶节”,树叶树枝拼贴出冬日风景

楚天都市报11月30日讯(记者卢成汉 通讯员谢助全 彭雪琴)秋天飘落的树叶树枝&#xff0c;经过拼贴&#xff0c;变成了有趣的图案。29日&#xff0c;洪山广场举行的“落叶节”上&#xff0c;小学生们的树叶作品&#xff0c;拼贴成冬日的风景。当天&#xff0c;小学生们将在洪山广…

Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂)

文章目录一、简介二、并发编程的3个基本概念1.原子性2.可见性3.有序性三、锁的互斥和可见性四、Java的内存模型JMM以及共享变量的可见性五、volatile变量的特性1.保证可见性&#xff0c;不保证原子性2.禁止指令重排六、volatile不适用的场景1.volatile不适合复合操作2.解决方法…

云服务器如何链接本地打印机_利用FileZilla搭建云服务器FTP服务端和本地客户端...

腾讯云服务器&#xff08;服务端&#xff09;本地计算机&#xff08;客户端&#xff09;1.首先在腾讯云上下载好FileZilla的对应服务端版本这里附上中文下载地址下载 - FileZilla中文网​www.filezilla.cn2.下载安装完成后打开默认下一步就好3.然后点击这个小头像进行账户设置首…

多线程之CAS与synchronized的比较

业务场景&#xff1a;需要实现一个支持并发的计数功能 1、计数功能的基本实现是&#xff1a; public class Increment{private int count 0;public void add(){ count; }}2、以上实现在并发环境下是不安全的&#xff0c;故修改方案1是加锁synchronized&#xff1a; publi…

6 日期字符串转日期_山西省导游协会关于发放电子导游证的通知 (生成日期为2020年5月28日2020年6月3日)...

各位会员、导游同仁们&#xff1a;山西省导游协会电子导游证(生成日期为&#xff1a;2020年5月28日-2020年6月3日)已制作完成&#xff0c;为保障电子导游证发放工作顺利进行&#xff0c;现将发放电子导游证有关事项通知如下&#xff1a;一、领取人员手机&#xff21;&#xff3…