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

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

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

相关文章

java字符串学习_java之字符串学习记录

java之字符串学习记录public class StringDemo {public static void main(String[] args) {//静态初始化字符串String s1 "hello china!";String s3 "Hello China!";System.out.println(s1);//动态初始化字符串String s2 new String("hello china!…

IMPDP导入实例(oracle)

【IMPDP导入实例】: su - oracle sqlplus /nolog conn /as sysdba select * from dba_directories; 开始 通过Xshell连接linux服务器后: Connecting to 10.149.56.40:22... [rootoracle ~]# su - oracle [oracleoracle ~]$ sqlplus /nolog SQL> conn …

java中解密技术是什么_详解Java 加密解密技术的分类和归纳

这篇文章主要介绍了Java加密解密基础分类方法汇总的相关资料,需要的朋友可以参考下Java 加密解密基础:密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学&#xff1b…

三级菜单的三个版本

1.这是我们通过一般方式进行的,就是按照正常的思路来写的,一步一步走 1 #_author:sangshijia2 #date:2016/8/243 menu_map{4 "河南":{5 "郑州":["新密","登封","中牟"],6 "…

java实现细胞自动机_Java自动机实现

java实现细胞自动机这篇文章将解决在Java中实现有限状态机的问题。 如果您不知道什么是FSM或在什么地方可以使用FSM,您可能会热衷于阅读本 , 本和本 。 如果您发现自己在设计上使用FSM的情况,则可能已经开始为实现相同接口的每个状态编写类。…

代理设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

调研《构建之法》指导下的历届作品

项目名称:未视APP学校:吉首大学团队:北京必趣科技有限公司 简介:发现未知的视界http://plus.jlu.edu.cn/item.php?id377 延续电影瞬间的感动,发现视界未知的温暖 理由:无优势,很多劣势,可是延续电影瞬间的感动&#x…

java图形旋转动画_Java动画:旋转图像

我将假设您了解如何旋转图像一次.如果你不这样做,你可以通过快速谷歌搜索找到它.您需要的是一个为您旋转它的后台进程.它的工作原理如下:/*** Warning - this class is UNSYNCHRONIZED!*/public class RotatableImage {Image image;float currentDegrees;public Rot…

java golang速度_golang思考之运行速度

有些资料显示golang的运行速度很慢,比Java慢,有时比Python慢。学习吧测试发现golang的运行速度和Java差不多。首先,使用各种语言编写同一个CPU密集的程序sum。C(或C)#include #include #include int main(void){int iN;int64_t jN;scanf(&quo…

java 中的正则表达式_Java中的正则表达式–软介绍

java 中的正则表达式正则表达式是一种可以应用于文本(Java中的String)的模式。 Java提供了java.util.regex包,用于与正则表达式进行模式匹配。 Java正则表达式与Perl编程语言非常相似,并且非常易于学习。 正则表达式匹配文本&…

HTML5移动端触摸事件

工作了近一个月了 因为公司是主要偏向于移动端,开始不懂移动端事件 一直用的click click在安卓端没有什么问题 但在IOS端就有问题了点击之后会延迟半秒 多亏旁边大神指点 原来 iOS上的Safari也支持click 和mouseover等传统的交互事件,只是不推荐在iOS…

用java写的教职工信息管理系统_基于Java的教师信息管理系统的设计与实现论文.doc...

基于Java的教师信息管理系统的设计与实现论文职场大变样社区():下载毕业设计成品全套资料,全部50元以下毕业设计(论文)任务书第1页毕业设计(论文)题目:基于java的教师信息管理系统的设计与实现毕业设计(论文)要求及原始数据(资料)&#xff1a…

春云边车

我有一个部署到基于NetflixOSS的云的应用程序,该应用程序具有以下结构: 本质上是一种将信息持久保存到Cassandra群集的服务。 所有应用程序都已注册到Eureka –因此,在本例中,该服务以及Cassandra节点都已在Eureka中注册&#xf…

java json写入内存_如何在客户端上减少JSON.stringify使用的内存量?

使用JSON.stringify将大型javascript对象转换为字符串时,有没有办法减少客户端上的内存使用量?我正在寻找解决下面问题的东西,但是对于客户端上的javascript .当我尝试一个简单的JSON.stringify(big_object)时,它会迅速占用所有RA…

GridView的一些常用属性:

GridView的一些常用属性:android:numColumns”auto_fit” //GridView的列数设置为自动android:columnWidth”90dp " //每列的宽度,也就是Item的宽度android:stretchMode”columnWidth" //缩放与列宽大小同步android:verticalSpacing…

activemq端口好_ActiveMQ已准备好黄金时段

activemq端口好ActiveMQ项目始于2005年-在很大程度上,它一直是Apache Software Foundation的顶级项目。 ActiveMQ项目的目的一直是提供世界一流的企业消息传递解决方案,使经纪人能够提供从支持IP的智能设备一直到企业后端的高可用性的连通性。 ActiveMQ提…

js创建节点,小试牛刀

实现如下的功能 非常简单的一个小训练。 思想&#xff1a; 1.首先创建text和一个button 代码如下、 1 <body> 2 <input type"text" id"text1"/> 3 <input id"btn1" type"button" value"创建" /> 4 <u…

java 8是指什么_java中8个基本数据类型到底是指什么?是什么意思,有什么作用?我需要权威的回答,...

在java中一共有八种基本数据类型&#xff0c;他们分别是byte、short、int、long、float、double、char、boolean整型其中byte、short、int、long都是表示整数的&#xff0c;只不过他们的取值范围不一样byte的取值范围为-128~127&#xff0c;占用1个字节(-2的7次方到2的7次方-1)…

企业讯息

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

php生成txt文件_php 批量生成html,txt文件的实现代码

本篇文章是对使用php批量生成html,txt文件的实现代码进行了详细的分析介绍&#xff0c;需要的朋友参考下首先建立一个conn.php的文件用来链接数据库$link mysql_connect("mysql_host" , "mysql_user" , "mysql_password" )or die("Could n…