目录

一.抽象工厂模式

1.1.模式的定义与特点

1.2.模式的结构

二.代理模式

2.1代理模式的定义与特点

2.2代理模式的结构与实现


一.抽象工厂模式

1.1.模式的定义与特点

抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

使用抽象工厂模式一般要满足以下条件。

  • 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。

  • 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。

  • 抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。

其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。

1.2.模式的结构

抽象工厂模式的主要角色如下。

  1. 抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

  2. 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

  3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

  4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

抽象工厂模式的主要角色如下。

二.代理模式

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。

在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。

2.1代理模式的定义与特点

代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点有:

  • 代理模式会造成系统设计中类的数量增加

  • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;

  • 增加了系统的复杂度;

那么如何解决以上提到的缺点呢?答案是可以使用动态代理方式

2.2代理模式的结构与实现

代理模式的结构比较简单,主要是通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,下面来分析其基本结构和实现方法。 代理模式的主要角色如下。

图1 代理模式的结构图

在代码中,一般代理会被理解为代码增强,实际上就是在原代码逻辑前后增加一些代码逻辑,而使调用者无感知。

  • 静态:由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的 .class 文件就已经存在了。

  • 动态:在程序运行时,运用反射机制动态创建而成

动态代理:

public class ProxyInvocationHandler implements InvocationHandler {//被代理的接口private Object target;public void setTarget(Object target) {this.target = target;}//生成得到代理类public Object getProxy(){return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this );}//处理代理实例,并返回结果@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = method.invoke(target, args);return result;}}//测试类public class Test {public static void main(String[] args) {//真实角色Host h=new Host();//代理角色ProxyInvocationHandler p=new ProxyInvocationHandler();//通过调用程序处理角色来处理我们要调用的接口对象p.setTarget(h);//设置代理类Rent o =(Rent) p.getProxy();//动态生成的代理类o.rent();}
}

JAVA设计模式之抽象工厂模式和代理模式相关推荐

  1. JAVA设计模式之抽象工厂模式

    本文继续介绍23种设计模式系列之抽象工厂模式. 前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需 ...

  2. Java设计模式之 抽象工厂模式实验报告书

    目录 Java设计模式之 1 抽象工厂模式实验报告书 1 实验四:抽象工厂模式 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1抽象工厂模式:电器工厂 2 3.2 car 6 3.3 ...

  3. Java 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

  4. Java设计模式:抽象工厂模式

    1. 定义 抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例. 抽象工厂模式与工厂 ...

  5. 最简单java设计模式:抽象工厂模式

    前言 在前一篇文章讲解了一下简单工厂模式和工厂方法模式,这篇文章再把抽象工厂模式讲解一下. 一.什么是抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提 ...

  6. JAVA设计模式之——抽象工厂模式

    文章目录 一.类型 二.定义 三.参与者 四.类图 五.示例 六.适用情况 参考文章 一.类型 创建型模式 二.定义 定义一个接口,用于创建一组相关或有依赖关系的对象,而且无需指定这些对象具体的类. ...

  7. java设计模式之为别人做嫁衣----代理模式

    2019独角兽企业重金招聘Python工程师标准>>> 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别 ...

  8. 菜鸟版JAVA设计模式-从抽象与实现说桥接模式

    桥接模式,初学的时候事实上非常不理解为什么要把这个模式命名为桥接模式,脑海里突然联想到.事实上我学习是一件比較痛苦的事情,由于我必需要知道来龙去脉才干学的进去,所以,非常快我就对这个命名产生了兴趣,桥 ...

  9. Java设计模式:抽象工厂

    本文是自己的学习笔记,主要参考以下资料 - 大话设计模式,程杰著,清华大学出版社出版 - 马士兵教育 1.抽象工厂应用场景 2.具体代码 2.1.设计抽象的产品簇 1.抽象工厂应用场景 工厂模式是为了 ...

最新文章

  1. 零基础编程入门python视频-编程零基础应当如何开始学习 Python?
  2. SpringBoot开发案例之整合Activiti工作流引擎
  3. 【Python】分享几个简单易懂的Python技巧,能够极大的提高工作效率哦!
  4. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
  5. 雷鸟邮件查找所有星标邮件_雷鸟的4种轻量级电子邮件替代品
  6. 赛尔笔记 | 自然语言处理中的迁移学习(下)
  7. Android 5.0 屏幕录制/截屏
  8. SSD 超详细入门(代码+原文)
  9. python调用海康威视的摄像头_Python调用海康威视网络相机之——python读取相机rtsp码流显示画面...
  10. pythonxy官网下载_spyder安装包
  11. 【服务器管理之远程桌面】
  12. [统计学笔记] 统计学中的相关关系和三大相关系数
  13. C++ Bulider6.0下string类型问题
  14. mybatis-plus中Constants.WRAPPER的导入包
  15. 什么品牌的蓝牙耳机通话音质最好?通话音质好的蓝牙耳机
  16. 如何做到精准引流获客?
  17. android 高德地图录制视频,《高德地图》录制导航录音包方法教程
  18. 电脑控制手机,脚本帮你实现更强大的功能
  19. TLS协议分析 (九) 现代加密通信协议设计
  20. 虚拟机桥接模式上网,局域网内ping通

热门文章

  1. 4乘4方格走的路线_苏州周边4个冷门自驾游路线景点推荐
  2. android 4.0系统,全新Android 4.0系统_手机Android频道-中关村在线
  3. php小程序onload,微信小程序 loading 组件实例详解
  4. Jmeter之json条件提取实战(三)
  5. 【学习总结】GirlsInAI ML-diary day-11-while循环
  6. day_01 解析简单的程序
  7. POJ1426-Find The Multiple(DFS)
  8. JS 实现 jQuery的$(function(){});
  9. Linux 添加新硬盘
  10. poj 3026 Borg Maze (最小生成树+bfs)