Java成神路上之设计模式系列教程之一
Java成神路上之设计模式系列教程之一
千锋-Feri
在Java工程师的日常中,是否遇到过如下问题:
Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式?
什么是设计模式?你是否在你的代码里面使用过任何设计模式?
解释下什么是观察者模式?
使用工厂模式最主要的好处是什么?在哪里使用?
等等相关的问题,那么问题来了,究竟什么是设计模式,它与我们又有什么关系?在我们的日常开发中充当什么样的作用?
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化,也是软件工程的基石脉络,如同大厦的结构一样。
但是,我们需要知道的是,设计模式不是语法也不是规则,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。我们在日常使用的各种主流框架,比如Spring、MyBatis、SpringBoot等,都大量的使用各种设计模式。特别是做项目中需要考虑迭代性和扩容性的时候,这些都是一些不可多得的参考的内容。
说白了,设计模式可以实现提高代码的重用性,是代码更易理解并保证代码的可靠性
其实关于设计模式,是源自1995 年,Gang of Four(GoF)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。
那么这23种设计模式的本质是面向对象设计原则的实际运用,是对类的封装、继承和多态充分的应用和解释。可以这么来说,这些设计模式就是代表着面向对象的核心应用和主题思想。
当然,设计模式只是一个引导,在实际的应用开发中,必须根据具体的需求来选择,比如,对于简单的应用,可能写一个简单的算法要比引入某种设计模式更加容易(ps其实这样的应用充斥着我们日常的开发工作)。但是对于大型应用开发或者框架、工具、中间件设计,用设计模式来组织代码显然更为恰当。
总体来说,我们根据每种设计模式的用途,将设计模式划分为三大类,创建型模式、结构型模式和行为型模式,接下来就分别聊聊这三种的归属:
1、创建型模式:就是用来描述怎如何创建对象,来创建对象的模式,抽象了实例化的过程。创建型模式在创建什么(what)、由谁来创建(who)、以及何时创建(when)这些方面,都为设计者提供了尽可能大的灵活性。一共包含5种设计模式,工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
2、结构型模式:就是讨论的是类和对象的结构,一般采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象实现新的功能(对象结构型模式),一共有7种设计模式,适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
3、行为型模式:就是用来描述类或对象之间如何进行相互协作,关注的是对象的行为,用来解决对象之间的联系问题。一共有11种设计模式,策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
合起来就是5种创建型+7种结构型+11种行为型,一共为23种设计模式,下图附上者23种设计模式之间的相互关系,有助于我们后面持续学习设计模式。
图1-1 23种设计模式之间的相互关系
Java成神路上之设计模式系列教程之一的更多相关文章
- 转载_2016,Java成神初年
原文地址:http://blog.csdn.net/chenssy/article/details/54017826 2016,Java成神初年.. -------------- 时间2016.12. ...
- java成神之——安全和密码
安全和密码 加密算法 公钥和私钥加密解密 生成私钥和公钥 加密数据 解密数据 公钥私钥生成的不同算法 密钥签名 生成加密随机数 基本用法 指定算法 加密对象 SealedObject Signatur ...
- java成神之——网络编程基本操作
网络编程 获取ip UDP程序示例 TCP程序 结语 网络编程 获取ip InetAddress id = InetAddress.getLocalHost(); // InetAddress id ...
- java成神之——MySQL Connector/J 的基本使用
使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...
- java成神之——线程操作
线程 Future CountDownLatch Multithreading synchronized Thread Producer-Consumer 获取线程状态 线程池 ThreadLocal ...
- java成神之——Fork/Join基本使用
Fork/Join 大任务分小任务,小任务结果合并 ForkJoinPool pool = new ForkJoinPool(); RecursiveTask<Integer> task1 ...
- java成神之——HttpURLConnection访问api
HttpURLConnection 访问get资源 访问post资源 访问Delete资源 获取状态码 结语 HttpURLConnection 访问get资源 HttpURLConnection c ...
- java成神之——jaxb操作xml的基本使用
JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...
- java成神之——文件IO
文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...
随机推荐
- 第三周博客之一---Oracle基础知识
一.数据库的定义.作用介绍 1.定义:按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 2.数据库的发展历史: 2.1.在1962年数据库一词出现在系统研发的公司的技术备忘录中 2. ...
- 远程连接SqlServer 数据库时提示 "在与SQL Server 建立连接时出现与网络相关的或特定实例的错误" 解决方法
前言 由于在之前的职业生涯中, 无论是数据库还是开发环境, 都是前人弄好的,自己只管使用就好啦.并不知安装过程中会出现各种各样的错.最近接触服务器之后,开发环境以及配置各方面都是从头到脚开始安装到配置 ...
- unigui的页面布局使用
(unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1+ 逆向进阶 Week4
<网络对抗技术>Exp2 PC平台逆向破解之"MAL_简单后门" Week4 一.实验内容 Task1 自己编写一个64位shellcode.参考shellcode指导 ...
- Windows下杀掉全部的子线程
最近遇到一个问题,就是在Windows下怎么杀掉全部的子线程,现把解决方法记录下. 问题来源: 用python执行了一个bat脚本,脚本的内容是执行一系列的adb命令,然后运行一个server.其中需 ...
- mybatics 与jpa
mybatics,dao层接口,mapper: public interface UserMapper { @Select("SELECT * FROM T_ROLE WHERE ROLE_ ...
- Windows MySQL测试数据库employees的导入
一: 首先下载employees测试数据库 https://launchpad.net/test-db/ 二:用文本编辑器打开其中的employees.sql文件,将第38行的set storage_ ...
- code about led_shake
//write by:cyt //Project Name:Led on/off //Time:2017-2-10 #include<reg51.h> void delay(int c) ...
- amaze ui 滚动监听
引入 此框架的css js 前提还要有jquery http://amazeui.org/javascript/scrollspy 然后看这个链接里的各种动画 运用方法就是 在你想要有动 ...
- Delphi7 在Windows 7上无法打开Help选项下帮助文档
发现无法打开Delphi7的帮助文档,百度了一下,问题已经解决. Delphi的帮助文档是*.hlp格式的,而Windows7已经不再带有WinHlp32程序,所以无法再打开此类格式. 此时你需要下载 ...