无论是工作,还是面试,大家都大谈设计模式,貌似会设计模式就是很厉害的角色了,个人一直认为,设计模式只是一些实践得到的宝贵经验,是解决一些特定场景问题的解决方案。
单例,用的很多。
保证唯一实例,避免重复运算。
从HibernateUtil得到SessionFactory,为Dao源源不断生成Session实例,到初始化一些耗时重要的操作,保存结果信息。这里的SessionFactory及结果信息就是要保存的,在系统运行时只允许计算或执行一次的操作,后续都是用这个实例,避免资源浪费。单例有饿汉(直接new 对象了)与懒汉式(需要时再创建)的。
程序上作的手脚有
1.私有化构造方法,不允许通过new的方式创建实例,从而达到控制实例的数量。
2.同步方法或者代码块,以避免代码多次执行;
3.static,使外部程序可通过类名直接访问方法取得这一单例。
《研磨设计模式》中指出了另一种方式,即通过内部类的方式创建:
因:内部类相当于类的成员,用static修饰后会仅且只在第一次时被初始化。这时就保证了唯一的实例,且JVM已经自己可以保证同步,不再需要synchronized控制了。
public class InnerClassSingleton { /** * @author zc * @Time 2011-8-7 */ private static class SingletonHolder { private static InnerClassSingleton instance = new InnerClassSingleton(); } private InnerClassSingleton() { } public static InnerClassSingleton getInstance() { return SingletonHolder.instance; } }
适配器
这也是一个常用的模式,Slf4j+slf4j-log4j+log4j,大致它 slf4j-log4j*.jar包中的几个类就是Adapter中的角色。适配器,说白了,就是之前的代码接口等放到现在已经不能符合要求,但是又不想完全抛弃它(毕竟它还是可以完成很多工作的),这时就需要用另一个类来封装它,封装后用新的接口(接口中包含新的方法)统一向外提供服务。slf4j , c3p0 , jboss的日志大致都是这么干的。
适配置器就是封装旧方法,扩展新功能
public class Adapter implements Target { //Target 为新的接口,自定义 private Old old ;//原来的类 public Adapter(Old old){ this.old = old; } public void method() { old.oldMethod();//执行原来类的方法 System.out.println(Adapter.class+" in "+Adapter.class.getResource("")); } //………若干新方法 }
外观模式
Facade,英文的音不要读错了.
方便外部系统调用,打包方法(封装内部)。
当一个模块成熟后或者一个向外提供服务的功能完成后,用一个方法作为入口,外部系统或者其它子系统通过这个方法来调用后面N个子方法。这个便是外观模式解决的问题。最多即是用来对外发布接口服务。
public class Facade { /** * 提供统一方法 * @throws Exception */ public static void test() throws Exception{ FApiA fa = new FAImpl(); //调用第一个操作 fa.generate(); FApiB fb = new FApiBImpl(); //调用 第二个操作 fb.generate(); } }
相关推荐
本科毕业设计--supanet中数据流适配层协议的研究.doc
移动端1px线适配问题-------适配各种编译CSS工具 stylus sass
c++设计模式-结构型模式-适配器模式,其他工程,c++源码。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
国产化指引
MODBUS-TCP/IP网络适配技术文档pdf,MODBUS-TCP/IP网络适配技术文档
银河麒麟服务器操作系统全指南(银河麒麟服务器操作系统-zookeeper-v3.5.5版适配手册.pdf 银河麒麟服务器操作系统-Caffe-v1.0版适配手册.pdf 银河麒麟服务器操作系统-couchdb-v1.6.0版适配手册.pdf 银河麒麟服务器...
基于 vue3 + vite + element plus + avue3 + vue-router + vuex,适配手机、平板、pc 的后台开源免费模板,希望减少工作量,帮助大家实现快速开发
memcache官方已经不再对php5.2以上的版本更新支持,这个是从网上找来的。测试好用!
基于PIC单片机的RS-232转CAN通信适配卡设计
前一阶段安装一款过长服务器FT2000飞腾2000服务器,yum源没有安装 LIBoffice安装包。其实X86X64版本满天飞,唯独缺少arm架构上的。没办法只能网上国外网站上找到源码文件重新编译,安装。为了方便大家特意不敢独享。...
wvp-GB28181-pro 适配支持 SQlite3 数据库 支持wvp-GB28181-pro 2.6.9
SENTINEL-森特奈 编码器适配连接器Profibus-DP用M12连接件zip,SENTINEL-森特奈 编码器适配连接器Profibus-DP用M12连接件资料
物联网-智慧传输-基于适配体——纳米金双模式生物传感器的鱼小清蛋白快速检测研究.pdf
使用CSS3-Media-Query技术适配Android平板屏幕分辨率和屏幕密度.docx
SENTINEL-森特奈 编码器适配连接器M12无源接插件zip,SENTINEL-森特奈 编码器适配连接器M12无源接插件资料
SENTINEL-森特奈 编码器适配连接器M23针型插头zip,SENTINEL-森特奈 编码器适配连接器M23针型插头资料
SENTINEL-森特奈 编码器适配连接器M23接插件zip,SENTINEL-森特奈 编码器适配连接器M23接插件资料
电信设备-信令异步传输模式适配层间回取数据的方法.zip
SENTINEL-森特奈 编码器适配连接器M23孔型插头zip,SENTINEL-森特奈 编码器适配连接器M23孔型插头资料
2020-03-24多种地图框架适配方法及装置