设计模式分为三大类:

  1. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  2. 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  3. 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

工厂模式(Factory Pattern):在工厂模式中,客户类与工厂来是分开的,消费者任何时候需要产品只需要向工厂请求就好,消费者无需修改就可以接纳新产品。缺点是:当前产品修改是工厂也需要修改。

单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。

代理模式(Proxy pattern):给某一个对象创建一个代理对象,并由代理对象控制源对象的应用。

原型模型模式(Prototype Pattern):原型模型是通过给定一个原型对象来指明要创建的的对象类型,可以用复制这个对象的方法创建更多的对象,原型模型允许动态的增加或减少产品类。缺点是:每一个类必须配备一个克隆方法。

工厂模式(Factory)

  工厂模式:主要分为三种模式:

  定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。

  为什么要使用工厂模式:

  1. 解耦 :把对象的创建和使用的过程分开
  2. 降低代码重复: 如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。
  3. 降低维护成本 :由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建对象B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。

1 简单工厂模式:

  在实际的开发当中较少使用,主要在于违背了我们的开放-封闭原则,主要适用于创建对象较少,客户端不关心对象的创建过程方面。

  主要的角色分配如下:

  1. 工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
  2. 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  3. 具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。在这里不做赘述。

2 工厂方法模式:

  定义: 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

  1. 主要使用的工厂模式步骤如下:
  2. 创建抽象工厂类,定义具体工厂的公共接口
  3. 创建抽象产品类定义,具体产品的公共接口
  4. 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
  5. 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;
  6. 最后,外界通过调用具体的工厂类的不同方法,从而创建不同的具体产品类的实例。

  工厂方法模式的优点:符合开闭原则,符合单一职责原则。可以形成基于继承的等级结构。

3 抽象工厂模式:

  定义:抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。(抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类。)

  1. 创建抽象工厂类,定义具体工厂的公共接口
  2. 创建抽象产品族类 ,定义抽象产品的公共接口
  3. 创建抽象产品类 (继承抽象产品族类),定义具体产品的公共接口
  4. 创建具体产品类(继承抽象产品类) & 定义生产的具体产品
  5. 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法
  6. 客户端通过实例化具体的工厂类,并调用其创建不同目标产品的方法创建不同具体产品类的实例
抽象工厂模式的优点:降低耦合。更符合开闭原则,符合单一职责原则,不使用静态工厂方法,可以形成基于继承的等级结构。

代理模式

  定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。通过引入代理对象的方式来间接访问目标对象

  模式原理图:

  1. 创建抽象对象接口(Subject):声明你真实对象需要让代理对象做的方法
  2. 创建真实对象类
  3. 创建代理对象类(Proxy),并通过代理类创建真实对象实例并访问其方法
  4. 客户端调用

  实现优点:

  1. 协调调用者和被调用者,降低了系统的耦合度
  2. 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用

模板方法模式(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的几种模式详解相关推荐

  1. FTP协议主动(Port)模式和被动(Passive)两种模式详解

    FTP协议主动(Port)模式和被动(Passive)两种模式详解 FTP(File Transfer Protocol)是文件传输协议的简称. 正如其名所示: FTP的主要作用,就是让用户连接上一个 ...

  2. Beini的6种***模式详解

    Aireplay-ng的6种***模式详解 -0Deautenticate冲突模式 使已经连接的合法客户端强制断开与路由端的连接,使其重新连接.在重新连接过程中获得验证数据包,从而产生有效ARPreq ...

  3. IPSec的三个协议和两种模式详解

    一.IPSec简介 IPSec (IP Security) 是IETF定义的一组协议,用于增强IP网络的安全性.IPSec 协议集 提供了下面的安全服务. 数据完整性(Data Integrity). ...

  4. Linux 网卡 bond 的七种模式详解

    点击下方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 像Samba.Nfs这种共享文件系统,网络的吞吐量非 ...

  5. 消息队列RabbitMQ入门与5种模式详解

    1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...

  6. linux发布微软消息队列,消息队列RabbitMQ入门与5种模式详解

    1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...

  7. 网络工程师,路由器4种模式详解:AP,Router,Repeater,Bridger (接入点,无线路由,中继,桥接)

    对于大多人来说使用路由器只会使用的就是PPPOE拨号,其他的都不是很懂,其实我们平时使用的是路由模式,那这次即将带来的各种模式有什么区别,又适合什么场合使用呢?这次就给朋友们说说路由器AP.路由.中继 ...

  8. RabbitMQ交换机(Fanout、Direct、Topic)三种模式详解

    一. 交换机 1.1 Exchanges 1.1.1 Exchanges概念 ​ RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产 者甚至都不知道这 ...

  9. ftp服务器的运行模式,FTP两种模式详解和实践技巧

    笔者最近几天被FTP折腾了一下,简单的路由器ACL就是无法通过被动模式的FTP流量.经数次实验和度娘.谷哥指导,终于对FTP模式有了深入理解.先感叹一句,以前学艺不精,书到用时方恨少! 不必要对FTP ...

最新文章

  1. linux的三个时间
  2. Wrong permissions on configuration file, should not be world writable!
  3. 11.28 软件工程概论psp
  4. Linux操作系统下共享文件夹设置方法介绍
  5. MMORPG大型游戏设计与开发(part3 of net)
  6. App.vue文件報錯
  7. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)
  8. 使用JDK的密码流的加密怪癖(以及如何做)
  9. python金融大数据分析视频_Python金融大数据分析 PDF 全书超清版
  10. Arduino文档阅读笔记-RFID工作原理及RC522模块介绍
  11. 正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
  12. 【C】揭秘rand()函数;
  13. 想学java编程从哪入手_初学编程从哪方面入手?
  14. 实验5 Spark SQL 编程初级实践
  15. SSL/TLS 单双向认证代码示例
  16. js——分享QQ、QQ空间、微信、微博
  17. 用java开发编译器之Thompson构造:正则表达式的词法解析
  18. Centos6.X升级至Centos7.2升至Centos7.9详细步骤和踩过的坑(升级者必看~)
  19. 支付宝app支付提示 系统繁忙,请稍后重试
  20. 柏诚股份冲刺上交所:年营收27.4亿 拟募资4.7亿

热门文章

  1. matlab 三维图像标题title移动
  2. uniapp上传图片压缩并转base64码、base64转图片路径
  3. 2021年9月电子学会图形化三级编程题解析含答案:绘制图形
  4. 树梅派4B+docker+Home assistant
  5. Python控制tek示波器(3)
  6. Android NDK Address Sanitizer
  7. 客房管理实时房态图布局
  8. 德尔菲技术是什么意思?如何使用?
  9. 基于图灵机器人的微信自动回复(个人娱乐)
  10. ffmpeg音视频解码器