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 ...
随机推荐
- 北航OO第二单元总结
电梯调度的设计策略 第一次作业是单部多线程傻瓜电梯 这次作业的电梯名副其实是一部傻瓜电梯,每次只能运一个人.出于线程安全的考虑,选择了阻塞队列.然后按照先来先服务的原则服务下一个指令.没有什么复杂的设 ...
- 进程pid理解
PID(Process Identification)操作系统里指进程识别号,也就是进程标识符.操作系统里每打开一个程序都会创建一个进程ID,即PID. PID(进程控制符)英文全称为Proces ...
- 将float数据类型转换为str
示例程序: #include <stdio.h> . . void UART_send_byte(char dat); void UART_send_string(unsigned cha ...
- Python列表的增删改查和元祖
一.定义列表 1.names = ['mike','mark','candice','laular'] #定义列表 2.num_list = list(range(1,10)) #range生成1-1 ...
- DevExpress ASP.NET Core Controls 2019发展蓝图(No.4)
本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...
- Python_day1 Learning record
Python Day1 Learning record(python第一天学习记录) 一.ptyhon安装 windows .下载安装包 https://www.python.org/download ...
- selenium中iframe的切换
#第一层是默认层, 第二层是新建标签的层,第三层是百度的那层from selenium import webdriverimport timedriver=webdriver.Chrome()driv ...
- mysql命令行下创建数据库,创建表,插入数据,查询数据
1.创建数据库 mysql> create DATABASE booktik -> ;Query OK, 1 row affected (0.02 sec) 2.创建表 mysql> ...
- 五、stdout,stdoin和stderr
stdout,stdin和stderr分别是标准输出流.标准输入流和标准错误流,当一个用户进程被创建的时候,系统会自动为该进程创建这三个数据流,默认情况下这三个流是在终端上表现出来的.可以使用fpri ...
- WORD中引用活动文档元素
要引用活动的段落.表格.域或其他文档元素,可使用 Selection 属性返回一个 Selection 对象.通过 Selection 对象,可访问选定内容中的所有段落或第一段.下列示例将边框应用于选 ...