设计模式主要有23种,大致可分为三类:创建型,机构行,行为型;具体如下:

创建型

1,单例设计模式
2,工厂设计模式
3,建造者设计模式
4,原型设计模式

结构型

5,代理设计模式
6,桥接设计模式
7,装饰设计模式
8,适配器设计模式
9,外观设计模式
10,享元设计模式
11,组合设计模式

行为型

12,模板设计模式

13,观察者模式

14,策略设计模式

持续更新中...

结构型简介

结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。


代理模式

代理模式又分为:静态代理和动态代理

律师这个职业大家应该都了解;就是代理打官司;下面以律师代理诉讼为例介绍代理模式

静态代理

静态代理的特点就是代理和被代理都要实现或者继承同一个接口或抽象类;

诉讼接口类

public interface ILawsuit {//提交申请void submit();//举证void burden();//辩护void defend();
}

具体公诉人

public class ZhangSan implements ILawsuit {@Overridepublic void submit() {System.out.println("老板拖欠工资,特此仲裁");}@Overridepublic void burden() {System.out.println("劳动合同和社保证明");}@Overridepublic void defend() {System.out.println("事实证据清楚!");}
}

代理律师

public class Lawyer implements ILawsuit {private ZhangSan zhangSan;public Lawyer(ZhangSan zhangSan) {this.zhangSan = zhangSan;}@Overridepublic void submit() {zhangSan.submit();}@Overridepublic void burden() {System.out.println("指导公诉人搜集证据");zhangSan.burden();}@Overridepublic void defend() {System.out.println("当庭辩护等");zhangSan.defend();}
}

诉讼:

public class litigation {public static void main(String[] args) {ILawsuit zhangSan = new ZhangSan();ILawsuit lawyer = new Lawyer((ZhangSan) zhangSan);lawyer.submit();lawyer.burden();lawyer.defend();}
}

动态代理

Java给我提供了一个边界的动态代理接口InvocationHandler,实现该接口重写调用方法invoke。主要通过invoke方法来调用具体的被代理方法,也就是真实的方法。动态代理的实现是基于反射实现的;

实现InvocationHandler:动态代理类

public class DynamicProxy implements InvocationHandler {private Object obj; //被代理类的引用public DynamicProxy(Object obj) {this.obj = obj;}@Overridepublic Object invoke(Object o, Method method, Object[] objects) throws Throwable {//通过反射调用被代理类的对象的方法;    Object result = method.invoke(obj,args);return null;}
}

动态代理实现诉讼

public class Litigation {public static void main(String[] args) {ILawsuit zhangSan = new ZhangSan();//构造一个动态代理DynamicProxy proxy = new DynamicProxy(zhangSan);//获取被代理类张三的ClassLoaderClassLoader loader = zhangSan.getClass().getClassLoader();//动态构造一个代理律师ILawsuit lawyer = (ILawsuit) Proxy.newProxyInstance(loader, new Class[]{ILawsuit.class}, proxy);lawyer.submit();lawyer.burden();lawyer.defend();}
}

总结:静态和动态是从code方面来区分的代理模式的两种方式;

代理模式(委托模式)— 结构型相关推荐

  1. 设计模式(十)享元模式Flyweight(结构型)

    设计模式(十)享元模式Flyweight(结构型) 说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释 ...

  2. 设计模式(六)桥连模式Bridge(结构型)

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而 ...

  3. OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式

    前言 前面我们学习了创建型设计模式,其中有5中,个人感觉比较重要的是工厂方法模式.单例模式.原型模式.接下来我将分享的是结构型模式! 一.适配器模式 1.1.适配器模式概述 适配器模式(Adapter ...

  4. 设计模式——结构型模式之代理模式和适配器模式(类比+图解,从无到有,一文看懂几种模式的区别)

    设计模式 系列文章: 一.创建型模式--工厂模式 二.创建型模式--单例模式.原型模式 三.创建型模式--建造者模式 四.结构型模式--装饰者模式 五.结构型模式--代理模式.适配器模式 文章目录 设 ...

  5. 【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★

    文章目录 一.七大设计原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特原则 6.里氏替换原则 7.合成复用原则 二.创建型模式 0.简单工厂模式 ( 不属于 GOF ...

  6. Java设计模式之七大结构型模式

    总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 结构型模式,共有七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 其中适配器模式主要分为三类:类的适配 ...

  7. 创建型、结构型、行为型模式(1)

    来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Struct ...

  8. 设计模式05——结构型模式

    一.概述  结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象.由于组合关系或聚合关系比继承关系耦合 ...

  9. 设计模式 之 结构型模式

    设计模式 之 结构型模式 模式 & 描述 包括 结构型模式 这些设计模式关注类和对象的组合.继承的概念被用来组合接口和定义组合对象获得新功能的方式. 适配器模式(Adapter Pattern ...

  10. 设计模式之结构型模式(5种)

    目录 结构型模式(Structural Pattern):怎么构造一个对象(行为.属性) 一.适配器模式 二.桥接模式(Bridge) 三.装饰者模式 设计模式在JAVA I/O库中的应用 案例 使用 ...

最新文章

  1. IMT-2030(6G)推进组发布《6G总体愿景与潜在关键技术》白皮书
  2. Android命令行工具logcat详细用法!
  3. 2020年人工神经网络第二次作业-参考答案第四题
  4. ads无法启用状态服务器,NAC ADSSO 无法工作在Microsoft 2008服务器版本
  5. SystemCenter2012SP1实践(16)私有云的第一个模板
  6. 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  7. MySQL5.7.x 安装 Linux7环境
  8. HTML复古游戏官网模板
  9. 买iPhone 11的要不再等等?iPhone 12首曝:全系5G,回归经典造型
  10. Spring源码分析之doDispatch分发请求逻辑
  11. desc 枚举类型id_想让代码更优雅?Mybatis类型处理器了解一下!
  12. 分类流控qdisc之htb
  13. 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
  14. 水仙花数 (hdu2010)
  15. 电脑的dns服务器未响应怎么解决,电脑DNS服务器未响应怎么解决
  16. php 图片汉字命名_基于php上传图片重命名的6种解决方法的详细介绍
  17. Outlook 2013 pst/ost邮件数据文件迁移实现
  18. 金融day03 —— 银行支付结算、银行资产业务
  19. 考试用计算机反思800字,考试作弊检讨书800字(精选5篇)
  20. Android 修改音量

热门文章

  1. 高级php工程师需要掌握的知识点
  2. 【LeetCode】算法初涉
  3. 90后马来西亚女孩闯华为
  4. 上传大文件报错413问题处理
  5. Zoreto+坚果云+pdf expert(papership) 实现文献管理和批注同步
  6. 「面试必背」Elasticsearch面试题(收藏)
  7. 【区块链108将】区块链追溯产品起源,让每一个产品都是放心产品
  8. 史上最骚最全最详细的IO流教程,小白都能看懂!
  9. 欧美html游戏,欧美HTML社区服务游戏
  10. War3地图编辑器基础:玩家设置+地图元素的属性设置+地图事件设置