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 ...
随机推荐
- 如何用EFCore Lazy Loading实现Entity Split
α角 与 β角 支持 现实生活 的 计算机系统,总有着两大偏差,第一个是 现实生活 与 计算机系统 的α角,另外一个是计算机系统的 逻辑设计 与 物理设计 的β角.举个栗子: α角:假设某个公司的商业 ...
- java实现链栈
package linkstack; /** * Created by Administrator on 2019/4/18. */ public class LinkStack { private ...
- 浅谈java 之 Map
先来一张Map的类继承图 Map :Hashtable .HashMap .LinkedHashMap .TreeMap 的比较 1.Hashtable的方法实现了synchronized 是线程 ...
- Python收发邮件
发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...
- 如何使用桥接模式使虚拟机VMware中的Redhat能上网
VMware中有三种网络连接方式可使其上网:桥接模式,NAT模式,host-only模式,下面详细介绍如何使用桥接模式使虚拟机中的Redhat连上互联网. Bridge(桥接)模式 在Bridge模式 ...
- uboot中往s5p6818的emmc刷写内容
建立分区: fdisk :: : fdisk Partition Map -- Partition Type: DOS Part Start Sector Num Sectors UUID Type ...
- maven管理jar,pom.xml导入spring依赖
<properties> <junit.version>4.12</junit.version> <spring.version>4.3.9.RELEA ...
- 使用SSD检测框架训练自己的数据
数据集做好后,训练程序为/examples/ssd/ssd_pascal.py,运行之前,我们需要修改相关路径代码,主要是训练路径的修改和关于自己数据集参数的一些修改. cd /examples/ss ...
- Linux 环境下umount, 报 device is busy 的问题分析与解决方法
在Linux环境中,有时候需要挂载外部目录或硬盘等,但当想umount时,却提示类似“umount:/home/oracle-server/backup:device is busy”这种提示. 出现 ...
- python面向对象之静态属性/静态方法/类方法/组合
继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...