常用设计模式学习

  • 单例模式:这个肯定是用的最多的,分为两种:饿汉/懒汉(饱汉)式。这个模式通常用于针对那些创建非常消耗资源的类,在一个容器中就只创建一个作为全局变量,在Spring容器管理中默认就是采用的单例模式。
下面简单介绍一下,饿汉式顾名思义,就是饥不择食了,不管有没有需要用这个对象的,先把它给创建好了再说;而懒汉呢,与之相反,只有在外部主动调用时,这个对象不存在的情况下才创建,如果已经有这个这个实例对象,那么直接返回,也不创建了。
这里再提一下,要使单例模式线程安全,可以使用DCL,双锁检测创建单例模式,记得用synchronize或者volidate禁止指令重排序,否则双锁检测可能会出问题。。。

  • 代理模式:这个在框架里面用的非常多,Spring框架里面最核心的IoC/AOP就是通过动态代理和反射来实现的。也分为两种:静态代理和动态代理,其中动态代理主要有JDK动态代理和CGlib动态代理。
我们可以通过代理对象来增强被代理对象的某些功能,目的是为了方便控制对某个对象的访问。
JDK动态代理:通过实现InvocationHandler,覆写其中的invoke方法,使用proxy.newInstance方法获得代理对象(记得强制转换,这个返回的是一个Object的对象)
CGlib动态代理:在没有实现上面说的接口的时候,可以使用这个。通过操纵底层字节码,动态生成大量代理类。(可能就会oom/持久代溢出了) 这个是继承Enhancer并覆写其中的方法实现。

  • 适配器模式:当初软件体系结构分给我讲的模式就是这个。。。实际上在生活中可以理解为电源适配器那种——本来这个电压是不符合手机充电电压的,但是我加上一个适配器,将它转换一下,诶,就可以了
典型应用:InputStream/Reader,我们知道这一个是字节流输入,一个是字符流输入,本来两个是不互通的,这时候再整一个InputSteamReader,搞定

  • 桥接模式:典型应用:JDBC

  • 装饰模式:打扮一下,就像皮肤一样,原画-德玛西亚皇子;奉先-德玛西亚皇子 还是有点区别的。利用已有的基础,加以改造,使之符合要求(玩家多花钱)
典型应用:还是上面的 I/O BufferedInputStream,构造函数里面接收一个inputStream类的实例作为参数,将其包装,得到带缓冲的字节流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值