创建模式
上面说了,创建模式是为有复杂需求的应用而产生的,到底是哪些复杂应用呢? 我会首先说需求,然后给出解决方法.我会尽量给出简单的代码,但是我个人觉得, 模式是随心所欲的, 这些代码只会固化思维. 而且这些代码实在是太简单了,还有就是现在的模式教程都大量用到interface,我尽量不采用.避免复杂
最简单的开始.
配置需求
读取配置文件是程序设计中的一大需求, 我们需要把经常要用的数据放入内存中, 但由于使用地点不固定, 每次都让它去装载一次配置代价上肯定不划算, 所以我们想到了 singleton 让内存中无论是多线成 访问还是其他, 都使用这个第一次就建好的配置对象
Singleton
class Config{private Config conf = new Config();private Properties prop = null;public Config getInstance(){ if(conf==null) conf= new Config(); return conf;}private Config(){//装载配置文件//prop =...}public String getProperty(String str){//从prop中获得属性}}//使用方法:String str = Config.getInstance.getProperty(str);安全对象
目前我有一个涉及到机密信息的业务需求, 有以下2个需求: 1 要所有的对象都拥有自己的域副本, 2要所有的类都自管理对象域所有的复制,创建,销毁. 这样.我们就可以使用Prototype了
Prototype
Class SecUser{private username=null;private password=null;//普通创建public SecUser(String u, String p){ username=u; password=p;}//复制创建public SecUser(SecUser user) this.username=user.username; this.password=user.password;}//自管理复制public SecUser clone(){ super(); SerUser user =new SerUser(username, password); return user;}//销毁public void destory(){ username=null; password=null; }}/**其他类中需要使用到SecUser对象时只需要xx.clone(); 就创建了一个新的对象,事实上就是clone机制,可惜现在的clone机制还是比较复杂,说不定哪天sun改成完全JVM自动就好了 幻想中...*/按需求使用过滤器
现在有大量的过滤器类,ANSIFilter, NumicFilter...但是我只需要使用到其中一个,哎 好东西多了也挺麻烦的. 这就可以使用下Factory了, 他的好处就是在创建之前可以加入一些逻辑代码来判定到底该如何需求创建.比如说得到特定配置啦, 根据需求计算了...
Factory
interface Filter{String doFilter(String str);}class ANSIFilter implements Filter{public String doFilter(String str){ //过滤掉ANSI字母字符 return str}}class NumicFilter implements Filter{public String doFilter(String str){ //过滤掉数字字符 return str}}/**现在需要根据配置文件或者String来生成对象,这里只有2个过滤器,说不定我的项目里有几十个哦,把apache的偷过来用 ^-^*/class FilterFactory{public static getFilter(String str){ //如果str没有就读取配置文件 if(str==null){ Properties prop = new Properties(); prop.load(FileInputStream("aa.properties")); str=prop.get("filtername"); } if(str!=null){ Filter filter =(Filter)class.forname(str); return filter;} return null;}}//只需要FilterFactory.getFilter("...")就可以获得满意的对象了,是不是很爽超超级复杂的对象的生成
现在有个对象,聚合了太多了其他对象了, 而且这些被聚合的对象还不是能够简单的new 就可以了的, 比如有些还得像上例所说的根据配置来生成, 简直麻烦死,比如现在有个业务要使用到上面的Filter(当然 ,一般情况下无状态的类这样做太奢侈),而且他要装入文本str, codestr等等数据.
Builder
class Text{private String [] text;private String [] code;private Filter filter;public Text(){loadText;loadCode;loadFilter;}protected void loadText(){ //装载文本,也许获得方式很麻烦哦 ^^}protected void loadCode(){ //也许就是javaeye的后台代码解析器解析后得到的数据 ^^}protected void loadFilter(){ //就是上面的过滤器拉}}/**是不是很简洁, 比把所有的装载方式都写在构造函数里 简洁多了吧, 对了 这个模式的作用就是为了代码看起来简洁. */创建模式完结, 花了1个多小时, 如果觉得还行的话 改天我会把其他的2种使用情况也贴出来~~ 1 楼 gavin.zheng 2008-11-03 整理下:
Singleton 使内存中只存在单一对象,使用static(也许我会介绍下static技巧)
prototype 复制另一个对象的时候使用 调用其xx.clone方法获得对象
factory 构建对象之前有逻辑时使用
builder 使构造函数简洁 2 楼 zhangzuohai 2008-11-04 受教,思想需要交流 3 楼 justry28 2008-11-04 楼主的的单例模式代码有些出入