设计模式是什么

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易地被他人理解、保证代码可靠性。毫无疑问,设计模式于己于人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样。

总体来说,设计模式分为3大类总共23种:

1、创建型模式,共5种

工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

2、结构型模式,共7种

适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式

3、行为型模式,共11种

策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

其实还有两类,即并发性模式和线程池模式。设计模式的模块不会每一种设计模式都讲解,而是挑选一些重要的,常用的设计模式进行讲解,重质不重量。

设计模式六大原则

1、开闭原则OCP

开闭原则说的是,对扩展开放、对修改关闭。在程序需要进行扩展的时候,不能去修改原有的代码,这也是为了使程序的扩展性更好、易于升级和维护。

2、里氏代换原则LSP

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。如果一个软件实体使用的是一个子类对象的话,那么它一定不能够使用基类对象。里氏代换原则的程序表现就是:在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类。

3、控制反转原则IOC

针对接口编程,依赖于抽象而不依赖于具体

4、接口隔离原则ISP

使用多个隔离的接口,比使用单个接口要好

5、迪米特法则DP

一个实体应当尽量少地与其他实体间发生相互作用,使得系统功能模块相对独立

6、合成复用原则

尽量使用组合/聚合的方式,而不是使用继承

设计中的三个关键字

1、抽象化

在众多事物中提取出共同的、本质性的特征,舍弃非本质的特征,就是抽象化。抽象化的过程也是一个剪裁的过程,在抽象时,同于不同,取决于从什么角度上来抽象。抽象的角度取决于分析问题的目的。

2、实现化

抽象类给出的具体实现,就是实现化。

一个类的实例就是这个类的实例化,一个具体子类是它的抽象超类的实例化。

3、解耦

这就比较重要了,平时我们老说好的代码应该是"高内聚、低耦合",那么什么是耦合呢?

所谓耦合,就是两个实体的行为的某种强关联。而将它们之间的强关联去掉,就是解耦。解耦是指将抽象化和实现化之间的耦合解开,或者说是将它们之间的强关联改换成弱关联。

所谓强关联,指的是在编译时期已经确定的,无法在运行时期动态改变的关联;所谓弱关联,就是可以动态地确定并且在运行时期动态改变的关联。从这个定义看,继承关系是强关联,聚合关系是弱关联。

MVC设计模式

MVC设计模式不属于23种设计模式之一,至于为什么后面会讲,但是因为这个非常常见、比较重要,就讲一下。

MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范。MVC用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个不见里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

MVC设计模式同时也提供了对HTML、CSS、JS的完全控制,接下来看一下MVC设计模式中的几个部分:

1、模型Model

模型标识企业数据和业务规则,在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,也就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性

2、视图View

视图是用户看到并与之交互的界面。对老式的Web应用程序而言,视图就是HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演者重要的角色,但是一些新的技术已经层出不穷,包括XHTML、XML/XSL、WML等一些标识语言和Web Service。

MVC的好处是它能为应用程序处理很多不同的视图,在视图中其实没有真正发生处理,视图只是作为一种输出数据并允许用户操纵的方式

3、控制器Controller

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单机Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理,它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据

使用MVC分层模型有助于管理复杂的应用程序,因为开发者在一个时间内可以专门关注某一个方面。例如,开发者可以在不依赖业务逻辑的情况下专注于视图设计,同时也让应用程序的测试更加容易。

使用MVC分层模型也简化了分组开发,不同的开发人员可以同时开发视图、控制器逻辑和业务逻辑。

最典型的MVC就是JSP+servlet+javabean

为什么MVC设计模式不属于23种设计模式之一

从两个角度看这个问题:

1、MVC设计模式我们这么叫,那么MVC到底是不是一种设计模式?或者说MVC是一种框架?框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对设计模式而言只有实例才能用代码表示,设计模式是比框架更小的元素。一个框架中往往含有一个或者多个设计模式,框架总是针对某一特定应用领域,但同一设计模式却可以适用于各种应用。可以说,框架是软件,设计模式是软件的知识;框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。从这个角度讲,MVC应属于一种框架,而不是一种设计模式

2、第一点说了,"一个框架中往往含有一个或者多个设计模式",实际上也确实如此。《GOF》,即《设计模式》一书的作者并没有把MVC提及为一种设计模式,在他们看来,MVC其实是其它三个景点的设计模式的演变:观察者模式+策略模式+组合模式,根据MVC在框架中不同的实现可能还会用到工厂模式和装饰器模式。比方说,model是应用的数据,view处理屏幕上展现给用户的内容,为此,MVC在核心通讯上基于推送/订阅模型,当一个model变化时它对应用其他模块发出更新通知,订阅者----通常是一个controller然后更新对应的view,这种自然的观察关系促进了多个view关联到同一个model。

转载于:https://www.cnblogs.com/xrq730/p/4896125.html

Java设计模式1:设计模式概论相关推荐

  1. 从Java类库看设计模式

    //From http://www.uml.org.cn/j2ee/201010214.asp 很多时候,对于一个设计来说(软件上的,建筑上的,或者它他工业上的),经验是至关重要的.好的经验给我们以指 ...

  2. java 常用十种设计模式示例归纳 | 已打包请带走

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. GitHub地址 DesignPattern 文章说明 一个Demo,集合常用的十种设计模 ...

  3. java 单例设计模式 [

    为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...

  4. java责任链设计模式_Java中的责任链设计模式

    java责任链设计模式 在本教程中,我们将学习如何在Java中实现责任链模式. 责任链设计模式涉及到拥有一系列负责处理请求的对象链. 当客户端发送请求时,第一个处理程序将尝试处理该请求. 如果可以处理 ...

  5. java责任链设计模式 订单_Java责任链设计模式实例分析

    本文实例讲述了Java责任链设计模式.分享给大家供大家参考,具体如下: 一 代码 abstract class AbstractHandler { private Handler Handler = ...

  6. java设计模式并发_[高并发Java 七] 并发设计模式

    [高并发Java 七] 并发设计模式 [高并发Java 七] 并发设计模式 为什么80%的码农都做不了架构师?>>> 在软件工程中,设计模式(design pattern)是对软件设 ...

  7. java复习系列[5] - Java 中的设计模式

    文章目录 Java中的设计模式 设计原则 迭代器模式 + Iterator 适配器模式 + HandlerAdapter 代理模式 + AOP 单例模式 + Spring Bean 模板方法模式 + ...

  8. 【Java】Java中的设计模式的介绍以及代码详解

    一.什么是设计模式? 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误 总结出来的. 对问题行之有效地解决方式,是一种设计 ...

  9. 3种设计模式的java小程序,java实现的设计模式小程序 模拟Web系统

    [实例简介] java实现的设计模式小程序,应用了策略模式,单例模式,工厂模式,抽象工厂模式,责任链模式.模拟的是Web系统针对不同用户提供不同的功能,可以在此基础上添加自己的代码. [实例截图] [ ...

  10. Java进阶篇设计模式之一 ----- 单例模式

    前言 在刚学编程没多久就听说过设计模式的大名,不过由于当时还是个彻彻底底的菜鸟,并没有去触碰.直到在开始工作中对简单的业务代码较为熟悉之后,才正式的接触设计模式.当时最早接触的设计模式是工厂模式,不过 ...

最新文章

  1. 本是同根生,相煎何太急?
  2. Intel Realsense D435 python(Python Wrapper)example02: NumPy and OpenCV 用窗口展示并排堆叠的RGB流和深度流
  3. 使用TensorFlow进行鬼写
  4. 桌面级linux推荐,七大顶级桌面比较!Linux平台自由选择
  5. spyder中绘图无法显示负号_[转载]Matlab常用函数
  6. 2019年2月数据库流行度排行: PostgreSQL攀至历史新高
  7. python之Linux基础(三)
  8. cass等距离等分线段的命令键_cad直线均分的命令(CAD等分线段快捷键?)
  9. python如何执行部分代码_python如何运行代码
  10. CKA2020年9月考试总结
  11. docker配置centos7(二),dnf,sshd配置及部分其它常用软件
  12. 你真的了解什么是冒烟测试么?
  13. 国科大学习资料--人工智能原理与算法-2021年期末考试题解析(学长整理)
  14. DVI接口关于技术性的知识导论
  15. android开发常用的ADB命令
  16. vue自适应布局(各种浏览器,分辨率)
  17. 将当前含有中文名称的文件 翻译成拼音
  18. 项目经理面试时常见的18个问题及回答技巧
  19. win32gui, win32con, win32api 安装失败
  20. 1037.有效的回旋镖

热门文章

  1. 单反相机参数的直观认识
  2. OpenStack pike版 安装openstack服务(4) 续安装openstack服务(3)
  3. libuv 网络库设计概览译
  4. Supervisord管理
  5. WsusAgent检测脚本
  6. 手动实现Promise 1
  7. 开源阅读_开源如何维持您的阅读习惯
  8. cobol_在尝试之前不要讨厌COBOL
  9. 前端:CSS/13/HTML引入CSS的方法,CSS表格属性,盒子模型,上下外边距合并
  10. Three.js 基础