设计模式学习心得

------------------创建模式

一、工厂

1、简单工厂

通过工厂类的方法获得对象

2、工厂方法

一个工厂的多个工厂子类,每个子类生产自己的产品。用户可以通过选择工厂来获得不同的产品。

3、抽象工厂

当产品维度复杂化时,需要将产品的共性、工厂的共性提取出,抽象成接口。比如海尔工厂包括海尔冰箱生产和海尔电视生产,海信工厂包括海信冰箱生产和海信电视生产。冰箱包括海信冰箱和海尔冰箱。用户只关心,工厂接口、产品接口。

好处:用户不关心细节,使用起来更简便。提供方隐藏细节,修改、增加其中的方法更简便(扩展性、可维护性)。

二、单例模式

饿汉式、懒汉式、双重检查、静态内部类

三、建造者模式

1、创建一个抽象builder类,子类可以构建不同对象,影藏构造细节

2、在一个复杂对象需要设定参数的情况,可以构建一个内部类builder来用于参数设定,使用链式调用。

四、原型模式

1.浅克隆 object.clone().返回的对象需要做cloneable标识

2.深克隆 通过stream的方式读写

------------------------结构型模式

一、代理模式

1、静态代理

代理类的构造函数需要传入被代理类的实例,在代理类的代理方法内调用目标方法,并增强。

2、JDK动态代理

使用反射包下的Proxy类的getInstance方法,动态生成带*$的类,也能对目标方法进行增强。

生成的类为Proxy的子类,可以通过运行时字节码反编译看到这个类。

原理:在类加载时,类资源可以从本地字节码文件中获取,也可以从运行时计算生成。JVM规范对此不强制要求。

3、cglib动态代理

底层采用ASM框架字节码生成技术。代理类继承被代理类。不能对声明为final的类进行代理。

如果当前类没有实现接口,只能用cglib动态代理。

代理模式可以保护目标对象,不让用户直接操作目标对象。解耦合。

你可能感兴趣的:(设计模式)