创建模式
上面说了,创建模式是为有复杂需求的应用而产生的,到底是哪些复杂应用呢? 我会首先说需求,然后给出解决方法.我会尽量给出简单的代码,但是我个人觉得, 模式是随心所欲的, 这些代码只会固化思维. 而且这些代码实在是太简单了,还有就是现在的模式教程都大量用到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);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自动就好了 幻想中...*/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("...")就可以获得满意的对象了,是不是很爽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(){ //就是上面的过滤器拉}}/**是不是很简洁, 比把所有的装载方式都写在构造函数里 简洁多了吧, 对了 这个模式的作用就是为了代码看起来简洁. */