Factory (bean creating)

Proxy(Agent)(Aop)书有~

Templete(springMVC Facelets)//此处及以上忽略

工厂模式(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/xiaohuomiao/p/10750348.html

javaEE Design Patter(2)详解3个设计模式相关推荐

  1. 详解23种设计模式(基于Java)—— 结构型模式(三 / 五)

    目录 3.结构型模式(7种) 3.1.代理模式 3.1.1.概述 3.1.2.结构 3.1.3.静态代理 3.1.4.JDK动态代理 3.1.5.CGLIB动态代理 3.1.6.三种代理的对比 3.1 ...

  2. javaEE Design Patter的几种模式详解

    设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. ...

  3. Java23中设计模式(Design Patterns)详解

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...

  4. 设计模式(Design Patterns)详解

    设计模式(Design Patterns) --可复用面向对象软件的基础一般会用到的: Factory( 工厂模式) Singleton(单例模式) 这两个比较多 Proxy(代理模式) Adapte ...

  5. Java基础学习总结(37)——Java23中设计模式(Design Patterns)详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. Java Web学习总结(39)——JavaEE常用的Jar详解

    activation:与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体负责mail的数据源和类 ...

  7. JavaEE Design Patter(2)

    一.Factory 工厂模式:主要分为三种模式: 定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行. 为什么要使用工厂模式: (1) 解耦 :把对 ...

  8. 【JavaEE】HTTP 协议详解 ( 使用fiddler进行抓取http请求/相应包)

    目录

  9. JavaEE Design Patter

    一.Factory 工厂模式:主要分为三种模式: 定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行. 为什么要使用工厂模式: (1) 解耦 :把对 ...

最新文章

  1. Jetson TX2 开发记录
  2. Cinder AZ 与 Nova AZ 的同步问题
  3. 支持Dubbo接口文档生成的工具!
  4. mysql同时购买两种商品_SQL题1——查询所有购入商品为两种或两种以上的购物人记录...
  5. python如何读取excel数据-python怎么读取excel中的数值
  6. TechEd China 2009 课程幻灯片和代码下载 - MBL311 SQL Server Compact 终极性能调校
  7. v-for中为什么要有key属性
  8. 我能考虑到的数组(老)方法就这些了(es5)
  9. p20适配鸿蒙系统,适配鸿蒙OS,必须要升级到EMUI 11?最新机型升级名单公布
  10. C++不区分大小写比较string类似CString.compareNoCase
  11. restTemplate踩过的坑-spring clound--cloud内部服务调用重试次数
  12. 【转】2.2 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)
  13. 关于OpenCV的基本数据类型
  14. Redis基础学习(2)
  15. VMware for mac inside error solutions
  16. Python django 安装 mysqlclient 失败
  17. Matlab2010b反复激活解决办法
  18. 虚拟机VMware的安装及使用
  19. 机器学习 损失函数 Loss function
  20. 常用Array对象方法详解(微信小程序)

热门文章

  1. 关于训练中AttributeError: ‘NoneType’ object has no attribute ‘flatten’
  2. Vue中base64 转图片上传
  3. 共享文件和文档方法指南
  4. 汉诺塔III(递推公式)
  5. ffmpeg学习心得之一键处理视频图片合成加图片水印文字水印裁剪
  6. 将一棵树转换为二叉树
  7. 快速了解StarRocks
  8. 无限级递归查找下级(PHP)
  9. GEE:使用 VCT(Vegetation Change Tracker)算法森林进行时序变化检测分析
  10. 教师工资管理系统(C语言)