java设计模式教程_Java设计模式教程

java设计模式教程

课程大纲

架构和计算机科学中的设计模式是记录特定专业领域中设计问题的解决方案的正式方法。 这个想法是由建筑师Christopher Alexander在建筑领域引入的,并已被修改为包括计算机科学在内的其他各个学科。

设计模式是针对软件设计中给定上下文中常见问题的通用可重用解决方案。 设计模式不是可以直接转换为源代码或机器代码的最终设计。 它是关于如何解决可以在许多不同情况下使用的问题的描述或模板。 模式是程序员设计应用程序或系统时可以用来解决常见问题的形式化最佳实践。

在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。

关于作者

Rohit Joshi是消费品行业的软件工程师。 他是Sun认证的Java程序员。 他曾在与不同领域相关的项目中工作。 他还参与系统分析和系统设计。 他主要从事Core Java和J2EE技术​​方面的工作,但在Javascript和Jquery等前端技术方面也有丰富的经验。

经验教训

在本课程中,您将被介绍设计模式。 您将了解什么是设计模式,为什么要在我们的代码中使用它们,以及如何选择和使用一种。 最后,描述了现有模式的分类。

通过一个真实的示例,您将学习应如何以及何时使用Adapter模式以及如何构造代码以实现它。 您将看到它如何为代码问题提供精巧的解决方案。

Facade模式使用Facade类使复杂的界面易于使用。 外观模式为子系统中的一组接口提供了统一的接口。 Facade定义了一个更高级别的界面,使子系统更易于使用。

Composite Pattern允许您将对象组合成树形结构以表示整个部分的层次结构,这意味着您可以创建由不同部分组成的对象树,但是可以将其视为一个整体。 Composite使客户能够统一地对待单个对象和对象组成,这就是Composite Pattern的目的。

桥接模式的目的是将抽象与其实现分离,以便二者可以独立变化。 它将抽象和实现置于两个不同的类层次结构中,以便可以独立地扩展它们。

当必须有一个类的一个实例,并且必须可以从一个著名的访问点访问客户端时,或者当唯一的实例可以通过子类扩展时,才可以使用Singleton模式。一个扩展实例,而无需修改其代码。

观察者模式是一种行为模式,它与对象之间的职责分配有关。 当抽象具有两个方面,一个依赖于另一个方面,对一个对象的更改需要更改其他对象,并且您不知道需要更改多少个对象或者何时一个对象应该能够通知另一对象时,应使用该方法。对象,而无需假设这些对象是谁。 换句话说,您不希望这些对象紧密耦合。

介体模式定义了一个对象,该对象封装了一组对象之间的交互方式。 介体通过防止对象之间显式地相互引用来促进松散耦合,并且它使您可以独立地更改其交互。 对象不是直接彼此交互,而是要求介体代表它们交互,这导致可重用性和松散耦合。 您将学习如何以及何时使用Mediator设计模式,以及如何构造代码以实现它。

代理模式为另一个对象提供代理或占位符,以控制对其的访问。 它带来了许多不同的变化。 一些重要的变化是远程代理,虚拟代理和保护代理。 在本课程中,我们将对这些变体有更多的了解,并将使用Java实现它们。 但是在我们这样做之前,让我们先了解更多有关代理模式的知识。 您将学习如何以及何时使用代理设计模式,以及如何构造代码以实现它。

责任链模式是一种行为模式,其中一组对象按顺序链接在一起,并提供一个责任(请求)以便由该组进行处理。 如果组中的对象可以处理特定请求,则可以处理该特定请求并返回相应的响应。 否则,它将请求转发到组中的后续对象。

Flyweight模式旨在控制对象的创建,其中应用程序中的对象非常相似且种类相似,并为您提供了基本的缓存机制。 它允许您为每种类型创建一个对象(此处的类型因该对象的属性而异),并且如果您请求具有相同属性的对象(已创建),它将返回相同的对象而不是创建新的对象之一。

构建器模式的目的是将复杂对象的构造与其表示分离,以便同一构造过程可以创建不同的表示。 这种类型的分离减小了物体的尺寸。 事实证明,该设计具有更高的模块化,每个实现都包含在不同的构建器对象中。 添加新的实现(即添加新的构建器)变得更加容易。

工厂方法模式为我们提供了一种封装具体类型的实例的方法。 Factory Method模式在称为工厂方法的指定方法内封装了选择和实例化适当类所需的功能。 工厂方法根据应用程序上下文和其他影响因素从类层次结构中选择适当的类。 然后,它实例化选定的类,并将其作为父类类型的实例返回。

抽象工厂(AKA Kit)是一种设计模式,它提供了一个接口,用于创建相关或相关对象的族,而无需指定其具体类。 抽象工厂模式将工厂方法模式的概念提高到了一个新的水平。 抽象工厂是一个类,提供了产生对象系列的接口。

原型设计模式用于指定要使用原型实例创建的对象的种类,并通过复制此原型来创建新对象。 其概念是复制现有对象,而不是从头开始创建新实例,这可能包括昂贵的操作。 现有对象充当原型,并包含对象的状态。

有时有必要记录对象的内部状态。 在实现检查点和“撤消”机制时,这是必需的,该机制使用户退出尝试性操作或从错误中恢复。 您必须将状态信息保存在某处,以便可以将对象还原到以前的状态。 但是对象通常封装了部分或全部状态,使得其他对象无法访问它,并且无法在外部保存。 暴露此状态将违反封装,这可能会损害应用程序的可靠性和可扩展性。 可以使用Memento模式完成此操作,而无需暴露对象的内部结构。

模板设计模式是一种行为模式,顾名思义,它提供了供用户使用的模板或算法结构。 用户无需改变算法的结构即可提供自己的实现。 模板模式定义了操作中算法的框架,将某些步骤推迟到子类。 模板方法允许子类在不更改算法结构的情况下重新定义算法的某些步骤。

状态设计模式允许对象在其内部状态更改时更改其行为。 该对象似乎将更改其类。 可以将对象的状态定义为在任何给定时间点的确切条件,具体取决于其属性或属性的值。 由类实现的方法集构成其实例的行为。 只要它的属性值发生变化,我们就说对象的状态发生了变化。

策略设计模式似乎是所有设计模式中最简单的,但它为代码提供了极大的灵活性。 即使与其他设计模式结合使用,该模式也几乎用于所有地方。 策略设计模式定义了一系列算法,将每个算法封装在一起,并使它们可互换。 策略使算法独立于使用该算法的客户端而变化。

命令设计模式是一种行为设计模式,有助于将调用者与请求的接收者解耦。 命令设计模式的目的是将请求封装为对象,从而使开发人员可以将具有不同请求,队列或日志请求的客户端参数化,并支持可撤销的操作。

口译员设计模式是一种重型模式。 这一切都是关于通过创建针对您的编程语言的解释器来组合自己的编程语言,或处理现有的编程语言。 给定一种语言,我们可以定义其语法的表示形式,以及使用该表示形式来解释该语言句子的解释器。

装饰器设计模式的目的是动态地将附加职责附加到对象上。 装饰器为子类提供了灵活的替代方案,以扩展功能。 该模式用于动态扩展对象的功能,而不必更改原始类的源或使用继承。 这是通过在实际对象周围创建一个称为Decorator的对象包装来完成的。

迭代器设计模式的目的是提供一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。 迭代器模式允许客户端对象以顺序的方式访问容器的内容,而无需了解其内容的内部表示形式。

访客设计模式为您提供了一种在不更改元素类的情况下,在对象上添加新操作的方法,尤其是当操作经常更改时。 访客设计模式的目的是表示要对对象结构的元素执行的操作。 访问者可让您定义新操作,而无需更改其所操作元素的类。

请确保转发此消息,让您的社交粉丝知道!

翻译自: https://www.javacodegeeks.com/2015/09/java-design-patterns.html

java设计模式教程

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

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

相关文章

python剑指offer面试题_剑指Offer(Python语言)面试题38

面试题38:字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca和cba。# -*- coding:utf-8 -*-class Solution:def Permutation(se…

侬娜·杰尔_杰尔·地狱

侬娜杰尔什么是JAR地狱? (或者是classpath地狱?还是依赖地狱?)在考虑使用Maven或OSGi等现代开发工具时,哪些方面仍然有意义? 有趣的是,似乎没有对这些问题的结构化答案(…

cmake 安装mysql5.6_CMAKE安装MYSQL 5.6.10

mysql5.6.10不支持configure安装了,提供了CMAKE安装方式 #sudo groupadd mysql #sudo useradd mysql -g mysql #sudo mkdir -p /home/mysql/data #sudo mkdir /usr/local/mysql #sudo mkdir /var/log/mysql #sudo chown -R mysql:mysql /home/mysql/data #sudo cho…

java 多线程变量可见性_Java多线程:易变变量,事前关联和内存一致性

java 多线程变量可见性什么是volatile变量? volatile是Java中的关键字。 您不能将其用作变量或方法名称。 期。 我们什么时候应该使用它? 哈哈,对不起,没办法。 当我们在多线程环境中与多个线程共享变量时,通常使用v…

Mysql运行在内核空间_思考mysql内核之初级系列6—innodb文件管理 | 学步园

在上一篇里面,bingxi和alex思考了information_schema,这个一直在innodb外围打转。没有进入到innodb的内部。在后续的文章中,以innodb的为主,逐个思考。Bingxi和alex今天了解了fil文件管理。对应的文件为:D:/mysql-5.1.…

pcl_openmap_OpenMap教程第2部分–使用MapHandler构建基本地图应用程序–第1部分

pcl_openmap1.简介 在第一个教程中,我们创建了一个基本的OpenMap GIS应用程序,该应用程序在JFrame中显示一个从文件系统加载的具有一个形状图层的地图。 该教程基于com.bbn.openmap.app.example.SimpleMap 。 在该教程中,我们使用了以下OpenM…

mysql7.5安装教程_CentOS7.5下yum安装MySQL8图文教程

卸载MariaDB1.列出所有安装的MariaDB rpm 包rpm -qa | grep mariadb2.强制卸载rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64安装MySQL1. 环境CentOS7.52. 获取MySQL最新版 rpm包yum仓库下载MySQLyum localinstall https://repo.mysql.com//mysql80-community-release-e…

字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...

字符串url获取参数让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况): 情况1 在inde…

mysql和sqlserver分页的区别_关于SQLServer和MySQL 查询分页语句区别

首先来定义几个要用到的参数(例子)t_user数据表int currentPage ; //当前页int pageRecord ; //每页显示记录数关于SqlServer数据库分页SQL语句为:String sql "select top "pageRecord " * from t_user where id not in (select top "(currentPage-1)*pag…

java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话

java 微型数据库用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题。 但是,通常情况下,这是幼稚的方法。 提供具有准确和可重复结果的有意义的基准并非易事。 在本文中,我们将向您介绍OpenJDK代码工具项目&a…

mysql快速随机_MySQL随机取数据最高效的方法

mysql随机取数据最高效率的方法发现在SQL语句里有一个 ORDER BY rand() 这样的一个语句,这个说是用着方便,但是效率实在是太低了,于是我用了以下的方法来优化,就是用JOIN表的方法来达到这个取随机数据行的方法,你可以用…

部署被测软件应用和中间件_使用FlexDeploy对融合中间件应用程序进行自动化软件测试...

部署被测软件应用和中间件自动化软件测试是任何软件组织都必须执行的强制性活动之一,以保证其产品质量。 但是,此过程通常变得相当复杂,尤其是涉及由多个不同部分组成的现代复杂系统的自动化测试时。 所有这些部分都基于不同的技术&#xff0…

python batch_size_python 實現動態 batch size,多張圖片如何堆疊轉成指針

前陣子有發問,關於 python 動態 batch size 如何實現,目前解決之前問題現在遇到的問題是當我把兩張圖片直接用 numpy concat 堆疊在一起 進行 acl.util.numpy_to_ptr 轉換成指針進行推理後,得到的結果只有第一張圖片是對的,第二張…

投行数据_投行对Java的二十大核心访谈问答

投行数据这是在金融领域(主要是在大型投资银行)共享Java核心访谈问题和答案的新系列。 在JP Morgan,Morgan Stanley,Barclays或Goldman Sachs上会问许多这些Java面试问题。 银行主要从多线程 , 集合 ,序列化…

php中mysql_fetch_row_php中的mysql_fetch_row,mysql_fetch_array,mysql_fetch_object

1.mysql_fetch_rowmysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。 注意,这里是从0开始偏移&…

primefaces_通过OmniFaces缓存组件以编程方式缓存PrimeFaces图表

primefaces在这篇文章中&#xff0c;您将看到如何结合PrimeFaces和OmniFaces获得可缓存的图表。 为了使事情变得简单&#xff0c;我们将使用PrimeFaces 折线图。 对于这种图表&#xff0c;我们可以在页面中使用<p&#xff1a;chart />标签和一个简单的托管bean。 因此&am…

mysql开发问题解决_开发过程中mysql常见问题的解决方法

本篇文章给大家带来的内容是关于开发过程中mysql常见问题的解决方法&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。记录开发过程中遇到mysql相关的问题以及解决方法&#xff0c;长期更新。远程连接问题mysql默认连接只能给本…

javaone_JavaOne 2015继续进行,Java将永远存在(……也许是长篇大论)

javaone好的。 也许我的标题太夸张了。 我确实相信Java&#xff0c;生态系统&#xff0c;社区&#xff0c;虚拟机和母编程语言将会存在很长一段时间。 有什么可以偏离的&#xff1f; 假定在我的酒店房间中花费很多时间&#xff0c;在我的演讲中增加技巧之间&#xff0c;我认为…

hmailserver mysql密码_第二步:点晴MIS系统Email模块hMailServer数据库连接配置指引

点击&#xff1a;windows系统-》开始-》所有程序-》hmailserver-》hMailServer Database Setup&#xff0c;在弹出的对话框中输入默认管理密码“clicksun2010”&#xff0c;进入后按照以下步骤操作&#xff1a;输入登陆密码&#xff1a;clicksun2010&#xff0c;务必使用这个密…

spring3.0异步_在Spring 4.2中更简单地处理异步事务绑定事件

spring3.0异步介绍 如您可能已经知道的&#xff08;例如&#xff0c;从我以前的博客文章中 &#xff09;&#xff0c;不再需要创建一个单独的类来实现带有onApplicationEvent方法的ApplicationListener &#xff0c;以便能够对应用程序事件做出响应&#xff08;包括来自Spring …