要学习设计模式,首先要明白设计模式,就是为实现某一种或某一组功能提供的代码编码方式.它没有固定的套路,只有约定俗成的风格.所有编码者可以根据已有的设计模式开放思维,设计出自己的设计模式,也会在无意中使用某些设计模式.
接下来我们举几个常用的模式例子
一..>单例模式
1.作用
-保证整个应用中某个实例有且只有一个
2.应用场合
-某些对象只需在应用在创建一个
3.饿汉模式 -- 加载类时的速度比较慢,运行时调用类的速度比较快,所属线程安全
-所属类加载时,不论其实例是否调用,都会被加载
//1.私有化默认构造方法
private Singleton(){}
//2.创建类的唯一实例
private static Singleton instance = new Singleton();
3.//提供一个获取实例的方法,并将此方法转换为类方法
return instance;
}
调用
Singleton s1 = Singleton.getInstance();
4.懒汉模式 -- 加载类时的速度比较快,运行时调用线程的速度比较慢,线程不安全
在提供给外部的构造方法中进行实例化
二..>代理模式 -->Spring的核心设计思想
1.概念
以其他模式提供一种代理以控制对这个对象的访问
去掉了某些功能或增加了某些服务
2.模式
远程代理 -- 客户端--服务器
虚拟代理 -- 将一个需要资源很大的对象延时访问,真正需要的时候才创建
保护代理 -- 权限控制
智能引用代理 --
---静态代理:代理和被代理对象在代理之前是确定的.他们都实现相同的接口或者继承相同的抽象类
----继承:功能的叠加会使代理类无限叠加(不推荐)
----聚合:增加功能的先后循序只需调整调用顺序
---动态代理:代理类和被代理对象之间加入代理处理类
----JDK动态代理:只能代理实现了接口的类
----CGLib动态代理:对指定目标类产生一个子类,通过方法拦截所有父类方法的调用
3.动态代理实现思路:通过Proxy的newProxyInstance返回代理对象
-声明一段源码(动态产生代理)
-编译源码(JDK Compiler API) 产生新的类(代理类)
-将这个类load到内存中,产生一个新的对象(代理对象)
-return 代理对象
4.应用场景
--当调用某个jar中的方法,我们不方便修改其源码时,就可以用代理在方法前后加入某些代码 -- AOP