Java设计模式、框架、架构、平台之间的关系

 1、设计模式

为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单。那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类、对象和接口之间的关系,是前人总结的经验。比如我要在代码中实现一个全局唯一的配置类,那么就使用Singleton模式。设计模式在实际编码工作和设计框架时会被使用到,而更高层的架构和平台则不会太关注它。

 

2、框架

做WEB开发接触到最多的框架可数ORM框架,ORM框架只是所有数据关系映射框架的统称,具体的如NHibernate、ActiveRecord等,框架是为了解决特定问题而存在的,其它诸如模板框架、缓存框架,框架不能直接使用,需要二次开发。

3、架构

从大的层面来说,比如针对公司业务的B2C网站系统架构,里面可能会用到多种解决各方面问题的框架,关注的是技术整合、扩展、可维护性。换个角度,在框架中也会涉及到架构问题,比如开发NHibernate框架,也需要考虑如何进行设计。

4、平台

平台的概念类似框架,但又结合的架构的考虑,它是更高层面上的“框架”,准确说是一种应用。它是针对企业用户,为解决企业业务需要而形成的产品。

一、设计模式(Design Patterns)

模式:

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

设计模式的分类

总体来说设计模式分为三大类:

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

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

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

其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:

java设计模式、框架、架构、平台之间的关系

设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

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

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

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

这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

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

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

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

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

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

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

(二)框架的基础知识

(1):框架是什么?

java框架:三大框架详解,其发展过程及掌握的Java技术慨括

简单点说:框架就是能完成一定功能的半成品软件,现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。

就其本质而言,框架是一个软件,而且是一个半成品的软件。所谓半成品,就是还不能完全实现用户需要的功能,框架只是实现用户需要的功能的一部分,还需要进一步加工,才能成为一个满足用户需要的、完整的软件。因此框架级的软件,它的主要客户是开发人员,而不是最终用户。

有些朋友会想,既然框架只是个半成品,那何必要去学习和使用框架呢?学习成本也不算小,那就是因为框架能完成一定的功能,也就是这“框架已经完成的一定的功能”在吸引着开发人员,让大家投入去学习和使用框架。

(2):框架能干什么?

能完成一定功能,加快应用开发进度

由于框架完成了一定的功能,而且通常是一些基础的、有难度的、通用的功能,这就避免我们在应用开发的时候完全从头开始,而是在框架已有的功能之上继续开发,也就是说会复用框架的功能,从而加快应用的开发进度。

给我们一个精良的程序架构

框架定义了应用的整体结构,包括类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程等等。现在Java界大多数流行的框架,大都出自大师手笔,设计都很精良。基于这样的框架来开发,一般会遵循框架已经规划好的结构来进行开发,从而让我们开发的应用程序的结构也相对变得精良了。

(3):对框架的理解

基于框架来开发,事情还是那些事情,只是看谁做的问题

对于应用程序和框架的关系,可以用一个图来简单描述一下,如图1所示:

 

java设计模式、框架、架构、平台之间的关系

如果没有框架,那么客户要求的所有功能都由开发人员自己来开发,没问题,同样可以实现用户要求的功能,只是开发人员的工作多点。

如果有了框架,框架本身完成了一定的功能,那么框架已有的功能,开发人员就可以不做了,开发人员只需要完成框架没有的功能,最后同样是完成客户要求的所有功能,但是开发人员的工作就减少了。

也就是说,基于框架来开发,软件要完成的功能并没有变化,还是客户要求的所有功能,也就是“事情还是那些事情”的意思。但是有了框架过后,框架完成了一部分功能,然后开发人员再完成一部分功能,最后由框架和开发人员合起来完成了整个软件的功能,也就是看这些功能“由谁做”的问题。

(三)架构

软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。

ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。

Mary Shaw和David Garlan认为软件体系结构是软件设计过程中,超越计算中的算法设计和数据结构设计的一个层次。体系结构问题包括各个方面的组织和全局控制结构,通信协议、同步,数据存储,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案之间进行选择。Garlan & Shaw模型[1]的基本思想是:软件体系结构={构件(component),连接件(connector),约束(constrain)}.其中构件可以是一组代码,如程序的模块;也可以是一个独立的程序,如数据库服务器。连接件可以是过程调用、管道、远程过程调用(RPC)等,用于表示构件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件,例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。

关于架构的定义还有很多其他观点,比如Bass定义、Booch & Rumbaugh &Jacobson定义、Perry & Wolf模型[7]、Boehm模型等等,虽然各种定义关键架构的角度不同,研究对象也略有侧重,但其核心的内容都是软件系统的结构,其中以Garlan & Shaw模型为代表,强调了体系结构的基本要素是构件、连接件及其约束(或者连接语义),这些定义大部分是从构造的角度来甚至软件体系结构,而IEEE的定义不仅强调了系统的基本组成,同时强调了体系结构的环境即和外界的交互。

(四)平台

java是一个可以在不同操作系统(例如windows,unix等)上运行的编程语言,java平台是指运行在各种终端(如pc、服务器、移动设备、嵌入式设备)的系统软件。PC机上的java程序是用javaSE开发出来的,服务器端的java程序是用javaEE开发出来的,移动设备的java程序是用javaME开发出来的。

移动平台:

J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。

桌面应用平台:

J2SE商业版本,标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程。J2SE 包含那些构成Java语言核心的类。

企业级平台:

J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition),J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。

(五)总和

1.框架与架构之间的关系

框架不是构架(即软件体系机构)。体系结构确定了系统整体结构、层次划分,不同部分之间的协作等设计考虑。框架比架构更具体。更偏重于技术涉嫌。确定框架后,软件体系结构也随之确定,而对于同一软件体系结构(比如Web开发中的MVC),可以通过多种框架来实现。

2.框架与设计模式之间的关系

设计模式和框架在软件设计中是两个不同的研究领域。设计模式研究的是一个设计问题的解决方法,一个模式可应用于不同的框架和被不同的语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体虽然它们有所不同,但却共同致力于使人们的设计可以被重用,在思想上存在着统一性的特点,因而设计模式的思想可以在框架设计中进行应用。

框架和设计模式存在着显著的区别,主要表现在二者提供的内容和致力应用的领域。

1)从应用领域上分,框架给出的是整个应用的体系结构;而设计模式则给出了单一设计问题的解决方案,并且这个方案可在不同的应用程序或者框架中进行应用。

2)从内容上分,设计模式仅是一个单纯的设计,这个设计可被不同语言以不用方式来实现;而框架则是设计和代码的一个混合体,编程者可以用各种方式对框架进行扩展,进而形成完整的不同的应用。

3)以第二条为基础,可以得出设计模式比框架更容易移植:框架一旦设计成形,虽然还没有构成完整的一个应用,但是以其为基础进行应用的开发显然要受制于框架的实现环境;而设计模式是与语言无关的,所以可以在更广泛的异构环境中进行应用。

总之,框架是软件,而设计模式是软件的知识体,提升框架的设计水平。

【编辑推荐】

  1. 对 Java 程序员的20建议(其他语言也适用)
  2. 为何我建议1-3年的Java程序员仔细看看这篇文章
  3. 来一个老生常谈的话题,JavaScript中,数组如何去重?
  4. Java 五大框架之间的对比
  5. 微服务注册中心 Eureka 架构深入解读

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

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

相关文章

如何学习(记住)linux命令(常用选项)

作者:林果皞 链接:https://www.zhihu.com/question/21690166/answer/66721478 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Unix & Linux 命令行特别之处在于,一些选项的设…

增效工具_【危中寻机】降本增效生存之道 运用IE基础工具提升制造效率

效率提升的利器工业工程IE作为一门学科诞生于美国,却首先在日本得到了最大程度的践行与推广,成为了丰田生产方式TPS及精益制造LP的核心现场IE中的4大核心(工程分析、动作分析、时间分析、布局分析)仍是所有IE的入门工具,被笔者称为“基础IE”…

as将安卓应用打包_Android Studio打包生成apk的方法(超级简单哦)

释放双眼,带上耳机,听听看~!打包文件是需要生成APK文件,其他人可以通过APK安装和使用,一般来说,包是指APK生成的发布版本,下文技术狗小编还介绍了Android Studio 超级简单的打包生成apk的方法&a…

Linux中常用的命令都是哪些单词的缩写

作者:蓬岸 Dr.Quest 链接:https://www.zhihu.com/question/49073893/answer/114986798 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 417个命令缩写:https://www.abbreviations.co…

ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作

mysql、ubuntu系统防火墙常规操作编辑:006 时间:2020-02-11mysql:数据库操作连接数据库:mysql -u username -p创建数据库:create database databasename;删除数据库:drop database databasename;指定数…

如何轻松记忆Linux文件系统层次结构

Linux对于新手来说非常难学。打好基础对于后面深层次的学习非常重要。 对文件系统层次结构要基本的概念。怎么才能理解并且记忆层级结构呢? 方法/步骤 为了帮助记忆,我做了一个比较清晰的图表来协助层次的记忆。 很多目录文件夹的名字长得非常抽象&…

fmc是fpga直接引出来的吗_家长速看!你还在用“不要和陌生人说话”糊弄孩子的安全教育吗?...

在许多幼儿安全教育案例中,我们都会看到这样一个试验:记者假扮人贩子,利用棒棒糖、零食去诱惑幼儿园的孩子。在其中一次试验中,21个孩子有20个中招,直接跟着陌生人走了。这个试验最终引出来的结论就是要教育孩子不要和…

CentOS 7文件系统与日志分析详解

Linux 文件系统 在处理 Linux 系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键。熟悉 Linux 系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点、“对…

oracle同一个示例两个用户的数据同步_分享两个shell脚本--一键统计Oracle数据库用户信息...

概述今天主要分享一下两个shell脚本,主要是为了查看所有数据库用户及其表空间,统计某个指定用户的明细,下面一起来看看吧~数据库连接脚本use script settdb.sh for DB login details registry#!/bin/bashtmp_username$SH_USERNAMEtmp_passwor…

plsql视图添加表字段_教你不到两分钟,快速创建数据透视图

如果说数据透视表给我们提供了灵活、快捷的数据计算工具, 那么数据透视图就是更直观、动态地展现大批量数据的变化规律和趋势。数据透视图作为数据透视表中的重点内容,高阶的内容包括数据透视图的编辑、美化成高大上的数据分析图表。与万能切片器结合使用实现多表甚…

c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...

向数据库的一张表中添加数据,可以采用单个添加,即一条数据、一条数据的添加;也可以采用批量导入,依次将好些条数据写入数据库的一张表中。文本借助实例《添加系列信息》讲解一种向数据库批量导入数据的方法。1.界面设计观看一下添…

项目架构开发:数据访问层之Cache

数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能。在分层系统中所有有关数据访问、检索、持久化的任务,最终都将在这一层完成。 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 1、有缓存、日志、异常处理、数据CRUD、…

jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果

HTML首先载入jQuery库文件和jquery.fly.min.js插件。接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片、价格、名称以及加入购物车按钮等信息。¥3499.00LG 49LF5400-CA 49寸…

结合vue、react、angular谈谈MVC、MVP、MVVM框架

首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别。 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个library,用于构建用户界面。 v…

先进的ASP.NET开源工作流快速开发框架 - RoadFlow

.net可视化工作流引擎RoadFlow - 设计概述 RoadFlow是天知软件旗下基于.NET的工作流快速开发平台,由从事六年以上OA及工作流开发与实施的团队设计开发,该工作流平台已应用于众多大型企事业单位。拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角…

view [bootstrap-4] not found如何解决_Dubbo如何处理业务异常,这个一定要知道哦

前言我们在开发应用系统时,不可避免的要使用到我们自己定义的异常,所以我们一般通常会用到自定义的业务异常类BusinessException,这个异常会继承extends RuntimeException,当发生业务限制的时候,会throw出来。问题在Sp…

android 加载网络bitmap图片 oom 简书_Android常见问题--ImageView加载图片OOM

开发中给ImageView加载一个高质量图片时,APP抛出了“Canvas: trying to draw too large(840253440bytes) bitmap.”的异常。猜测是图片占用内存太大,超出APP被分配的内存(我用的mate9,APP被分的内存差不多200m),造成了OOM。解决方…

matlab连接mysql教程视频_Matlab建立到Oracle数据库的连接

Linux下的配置过程和Windows一样,如下:1、将Oracle JDBC的JAR包拷贝到Matlab的相关目录(..\matlab\java\jar\toolbox\)下。一、Matlab通过ODBC建立到Oracle数据库的连接1、在Windows下“开始”→“控制面板”→“性能和维护”→“管理工具”,…

C# App.config学习

进入公司一年多来&#xff0c;对配置文件添加了不少参数&#xff0c;但是从未想过这些参数是如何被读取出来的&#xff0c;今天把读取参数的处理看了一下&#xff0c;收获不少。假定有App.config如下 <?xml version"1.0" encoding"utf-8" ?> <…

大数据-----软件开发模型(详细讲解)

大数据学习免费学习资料&#xff08;免费教程&#xff09; 软件工程中&#xff0c;常用的开了模型有四种&#xff1a;瀑布模型、原型模型、增量模型和螺旋模型。 ⒈瀑布模型包括计划&#xff0c;需求分析、设计、编码、测试、运行维护六个阶段&#xff0c;阶段自上而下&#x…