博客
关于我
23种设计模式 GoF23
阅读量:306 次
发布时间:2019-03-04

本文共 2620 字,大约阅读时间需要 8 分钟。

23种设计模式 GoF23

提高思维能力、编程能力、设计能力

程序设计更加标准化、工程化,开发效率大大提高

可读性高,可靠性强、可维护性强

一种思维、一种态度、一种进步

要理解思想

设计模式的基本要素

模式名称

问题

解决方案

效果 (优点和缺点)

哪23种?

创建型模式

单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式

结构型模式

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

行为型模式

模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式

OOP的七大原则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiKxuCq4-1615135648142)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307181638349.png)]

工厂模式

详细分类

简单工厂模式

工厂方法模式

抽象工厂模式

OOP七大原则

开闭原则:一个软件的实体应当对扩展开发,对修改关闭

依赖倒转原则:要针对接口编程,不要针对实现编程

迪米特法则:只与你直接的朋友通信,而避免和陌生人通信

核心本质

实例化对象不适用new,用工厂方法代替

将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbiWQqCd-1615135648144)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307183421443.png)]

建造者模式

代理模式 proxy

为什么要学习代理模式? 因为这是SpringAOP的底层 【SpringAOP和SpringMVC】

静态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决 共同完成的事情
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,代理真实角色后,一般会做一些附属操作
  • 客户:访问代理对象的人

代理角色的好处:

  • 让真实角色的操作更加的纯粹!不用去关注一些公共的业务
  • 公共业务就交给代理角色!实现了业务的分工
  • 公共业务发生扩展时,方便集中管理!

缺点

  • 一个真实角色,就会产生一个代理角色,开发效率会变低~

加深理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwJKj0cn-1615135648145)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307202427854.png)]

动态代理

  • 动态代理角色和静态代理角色一样
  • 动态代理的代理类是动态生成的,不是我们直接写好的!
  • 动态代理分为两大类: 基于接口的动态代理 、 基于类的动态代理
    • 基于接口 ---- JDK动态代理【我们使用】
    • 基于类: cglib
    • java字节码实现: javassist 比较流行,但是不是tomcat

需要了解两个类

Proxy(代理)

有一个静态方法,可以创建一个实例的动态代理

java.lang.reflect.InvocationHandler(调用处理程序)

通过代理实例 调用处理程序的一个接口

// 可以当作一个工具类package com.realguo.dynamic;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MyInvocationHandler 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);    }    // 处理代理实例,并返回结果    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {           // 动态代理的本质,通过使用反射机制实现!!!        log(method.getName());        Object result = method.invoke(target, args);        return result;    }    void log(String name){           System.out.println("[" + name + "]");    }}

理解

Proxy.newProxyInstance(类加载器,要实现的代理接口,InvocationHandler调用处理程序)

返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。

InvocationHandler 是 代理实例的调用处理程序 实现 的接口 ,里面有调用处理程序

动态代理的本质:

是通过反射来实现的

动态代理的好处:

  • 让真实角色的操作更加的纯粹!不用去关注一些公共的业务
  • 公共业务就交给代理角色!实现了业务的分工
  • 公共业务发生扩展时,方便集中管理!
  • 一个动态代理类代理的是一个接口,一般就是对应的一类业务
  • 一个动态代理类,可以代理多个类,只要实现了同一个接口即可

单例模式

饿汉模式

懒汉模式

双重锁

转载地址:http://dvsq.baihongyu.com/

你可能感兴趣的文章
【调剂】其它计算机/软件调剂信息 20.4.21
查看>>
【调剂】华侨大学媒体分析与数据挖掘小组招收学硕调剂生
查看>>
【调剂】211云南大学2020年硕士研究生招生调剂通知
查看>>
【调剂】985复旦大学类脑智能科学与技术研究院硕士研究生招生接收校内调剂考生工作细则...
查看>>
2021考研数学,如何利用错题高效拿分?
查看>>
【调剂】上海应用技术大学2021年硕士研究生招生考试调剂信息
查看>>
【调剂】沈阳理工大学 环境科学与工程,材料与化工、化学工程与技术,有调剂名额,相关专业可跨专业...
查看>>
2021QS计算机专业排名发布:MIT斯坦福霸榜,清华北大进入前20
查看>>
JavaScript学习手册(45)
查看>>
【纪中2020.5.06日】模拟赛题解
查看>>
eclipse中server location灰色解决
查看>>
idea 写web项目图片不显示
查看>>
实用网站推荐
查看>>
CSS浮动属性
查看>>
SVM多类识别
查看>>
svn 撤销已提交的错误修改
查看>>
算法工程师数学理论提高札记(improving)
查看>>
Android网络优化--精准获取流量消耗
查看>>
VTK:IO之WriteVTI
查看>>
VTK:图片之ImageExport
查看>>