废话不多说,先看设计模式的本质,设计模式是干什么的 :
1.设计模式就是程序员在日常开发中总结出来的经验,形成一种设计,这种设计被称之为设计模式
2.模式:是在某情境下,针对某种问题的某种解决方案
3.如果你发现自己处于某个情境下,面对着所想达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你领向某个解决方案
我们用单例设计模式来入手
第二点某情境下:比如我在X类中有一个方法setTxet(String str) 和getText(), 我的需求是,在任何情境下,都要保证 getText获取到的testStr是setTestStr中设置的
那么我们分析这种场景,应该怎么做到, 当然就是 X 的实例保证一致就行了
这个在实际操作中肯定是挺麻烦的事情,那么想出一个解决的方法,就是做一个每次获取的都是同一个x 实例的方法,单例就应运而生
那么我们怎么手鲁单例模式呢,重点来了
分析: 找出单例模式的本质,再强调一遍,找出单例模式的本质, 单例模式的本质是啥? 就是每次获取的实例都是同一个实例 (X x 每次获取到的x 都是一个东西) ,知道了本质这样不就好办了吗 ,手鲁单例模式
private static X x;
//在X类中新建一个方法 获取单例
public X getSingleton() {
if (x == null) {
x = new X();
}
return x;
}
x 实例存在,直接返回;x 不存在,就新建, 加上static,这不就是单例了吗,设计模式还是挺好鲁的,你们可能会说这个效率不高什么的,这里给你们一个手鲁单例的思路,你们在网上查到的单例是不是很蒙,这么复杂,其实来来去去无非就是提高性能,线程安全方面的考虑
比如考虑到线程安全,加把锁 synchronized
//在X类中新建一个方法 获取单例
public synchronized X getSingleton() {
if (x == null) {
x = new X();
}
return x;
}
线程安全了,想提高性能,优化一下,接下来就有一波根据系统特性,java 特性等等的单例模式出现 ,无非就是这样
根据找出设计模式的本质来看看代理模式,代理模式的本质是啥?
现实场景中相似的有,比如A是一个生产纸巾的厂家,A要把纸巾卖出去,它想到的就是找直播小姐姐帮忙(找到B和C)帮它卖纸巾,B和C代理了A纸巾产品,这就是代理模式了
本质就是 A 是厂家要卖产品, 找到了B和C帮A卖,B和C找到单就让A去实现卖的过程,比如包装好寄出去等
代码实现就是 A 有一个sell()方法,B 和 C代理了A,就是拿到sell()方法
public class A {
public void sell(){
}
}
public class B {
public void sell(){
new A().sell();
}
}
public class C {
public void sell(){
new A().sell();
}
}
上面这种也是一种代理模式,看清了本质,再写实现代码就相当容易,也不觉得设计模式有多难,本质本质
再来一个代理模式的例子,深入理解,当然还是看本质,网上的demo有点复杂,看了我上面的,看下面这个应该就能看懂
比如上网, 客户要连接网络,代理商们想实现各种不同的收费方式,移动公司只提供了一个上网功能,其它各种方式,要代理商自己根据自己的需求定制,看图
实际的上网服务是Real , Proxy 代理了Real 的上网方法,然后自己在上网中添加了检查用户合法的功能,当然还可以有其它操作,比如收费多少,客户是不是VIP等等 符合要求才允许上网



