javaEE Design Patter的几种模式详解
设计模式分为三大类:
- 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
- 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
工厂模式(Factory Pattern):在工厂模式中,客户类与工厂来是分开的,消费者任何时候需要产品只需要向工厂请求就好,消费者无需修改就可以接纳新产品。缺点是:当前产品修改是工厂也需要修改。
单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。
代理模式(Proxy pattern):给某一个对象创建一个代理对象,并由代理对象控制源对象的应用。
原型模型模式(Prototype Pattern):原型模型是通过给定一个原型对象来指明要创建的的对象类型,可以用复制这个对象的方法创建更多的对象,原型模型允许动态的增加或减少产品类。缺点是:每一个类必须配备一个克隆方法。
工厂模式(Factory)
工厂模式:主要分为三种模式:
定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。
为什么要使用工厂模式:
- 解耦 :把对象的创建和使用的过程分开
- 降低代码重复: 如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。
- 降低维护成本 :由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建对象B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。
1 简单工厂模式:
在实际的开发当中较少使用,主要在于违背了我们的开放-封闭原则,主要适用于创建对象较少,客户端不关心对象的创建过程方面。
主要的角色分配如下:
- 工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
- 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
- 具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。在这里不做赘述。
2 工厂方法模式:
定义: 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。
- 主要使用的工厂模式步骤如下:
- 创建抽象工厂类,定义具体工厂的公共接口
- 创建抽象产品类定义,具体产品的公共接口
- 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
- 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;
- 最后,外界通过调用具体的工厂类的不同方法,从而创建不同的具体产品类的实例。
工厂方法模式的优点:符合开闭原则,符合单一职责原则。可以形成基于继承的等级结构。
3 抽象工厂模式:
定义:抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。(抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类。)
- 创建抽象工厂类,定义具体工厂的公共接口
- 创建抽象产品族类 ,定义抽象产品的公共接口
- 创建抽象产品类 (继承抽象产品族类),定义具体产品的公共接口
- 创建具体产品类(继承抽象产品类) & 定义生产的具体产品
- 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法
- 客户端通过实例化具体的工厂类,并调用其创建不同目标产品的方法创建不同具体产品类的实例
代理模式
定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。通过引入代理对象的方式来间接访问目标对象
模式原理图:
- 创建抽象对象接口(Subject):声明你真实对象需要让代理对象做的方法
- 创建真实对象类
- 创建代理对象类(Proxy),并通过代理类创建真实对象实例并访问其方法
- 客户端调用
实现优点:
- 协调调用者和被调用者,降低了系统的耦合度
- 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
模板方法模式(Template Method)
就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用
就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用.
参考原文:https://www.cnblogs.com/wudidd/p/10707077.html
转载于:https://www.cnblogs.com/ren9ie/p/10962569.html
javaEE Design Patter的几种模式详解相关推荐
- FTP协议主动(Port)模式和被动(Passive)两种模式详解
FTP协议主动(Port)模式和被动(Passive)两种模式详解 FTP(File Transfer Protocol)是文件传输协议的简称. 正如其名所示: FTP的主要作用,就是让用户连接上一个 ...
- Beini的6种***模式详解
Aireplay-ng的6种***模式详解 -0Deautenticate冲突模式 使已经连接的合法客户端强制断开与路由端的连接,使其重新连接.在重新连接过程中获得验证数据包,从而产生有效ARPreq ...
- IPSec的三个协议和两种模式详解
一.IPSec简介 IPSec (IP Security) 是IETF定义的一组协议,用于增强IP网络的安全性.IPSec 协议集 提供了下面的安全服务. 数据完整性(Data Integrity). ...
- Linux 网卡 bond 的七种模式详解
点击下方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 像Samba.Nfs这种共享文件系统,网络的吞吐量非 ...
- 消息队列RabbitMQ入门与5种模式详解
1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...
- linux发布微软消息队列,消息队列RabbitMQ入门与5种模式详解
1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...
- 网络工程师,路由器4种模式详解:AP,Router,Repeater,Bridger (接入点,无线路由,中继,桥接)
对于大多人来说使用路由器只会使用的就是PPPOE拨号,其他的都不是很懂,其实我们平时使用的是路由模式,那这次即将带来的各种模式有什么区别,又适合什么场合使用呢?这次就给朋友们说说路由器AP.路由.中继 ...
- RabbitMQ交换机(Fanout、Direct、Topic)三种模式详解
一. 交换机 1.1 Exchanges 1.1.1 Exchanges概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产 者甚至都不知道这 ...
- ftp服务器的运行模式,FTP两种模式详解和实践技巧
笔者最近几天被FTP折腾了一下,简单的路由器ACL就是无法通过被动模式的FTP流量.经数次实验和度娘.谷哥指导,终于对FTP模式有了深入理解.先感叹一句,以前学艺不精,书到用时方恨少! 不必要对FTP ...
最新文章
- linux的三个时间
- Wrong permissions on configuration file, should not be world writable!
- 11.28 软件工程概论psp
- Linux操作系统下共享文件夹设置方法介绍
- MMORPG大型游戏设计与开发(part3 of net)
- App.vue文件報錯
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)
- 使用JDK的密码流的加密怪癖(以及如何做)
- python金融大数据分析视频_Python金融大数据分析 PDF 全书超清版
- Arduino文档阅读笔记-RFID工作原理及RC522模块介绍
- 正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
- 【C】揭秘rand()函数;
- 想学java编程从哪入手_初学编程从哪方面入手?
- 实验5 Spark SQL 编程初级实践
- SSL/TLS 单双向认证代码示例
- js——分享QQ、QQ空间、微信、微博
- 用java开发编译器之Thompson构造:正则表达式的词法解析
- Centos6.X升级至Centos7.2升至Centos7.9详细步骤和踩过的坑(升级者必看~)
- 支付宝app支付提示 系统繁忙,请稍后重试
- 柏诚股份冲刺上交所:年营收27.4亿 拟募资4.7亿