新手学习工厂模式心得,请高手指教

09-10-14 theskyofsky
工厂模式:在面向对象思想中,我们需要将创建 对象 的工作与使用 对象 的工作分开, 也就是说,让创建 对象 所需要的大量初始化工作从构造函数中分离出去。
这时我们就需要Factory工厂模式来生成 对象 了,不能再用上面简单new 类(参数)。也可以理解说,在创建 对象 的时候,一般要使用工厂模式。
举例:在××××中,学校是一个类,它包含子类:大学,中学,小学,幼儿园。
在创建类的时候可以使用共创模式:
一个接口 School ,接口中定义 School的属性。
另外还应该有 SchoolManage 类定义 School 的动作(方法); 这也是最可能复用的 类。
SchoolService 类 定义School 有关的业务;


工厂类:
public class SchoolFactory {

public static School create(String schoolClassName) {
//动态配置常量,也可以使用配置文件
      InitialContext ic = new InitialContext();

      //动态装入schoolClassName
//例如 schoolClassName = COLLEGE;
      String className =(String) ic.lookup(JNDINames.schoolClassName);
Class c = Class.forName(className);
return (School)c.instance();

}
}

推广:当大学,中学,小学,幼儿园还有子类时:
例如:中学有重点中学,一般中学
这样可以使用抽象工厂类

public abstract class SchoolFactory

public class MiddleSchoolFactory extends SchoolFactory
在 工厂 MiddleSchoolFactory 中生产 对象 GeneralMiddleSchool 和 KeyMiddelSchool

School 类为接口类
MiddleSchool 为抽象类
GeneralMiddleSchool 和 KeyMiddelSchool extends MiddelSchool implment School

结合缓存,在设计 对象类 的时候应该将对象经常改变的属性分离出来,形成一个单独的对象状态类。
在对象中可以设置一个状态位来检查该属性是否变化。(或者用一个聚合类来装配 对象和对象的状态)
生成 对象 后将 对象和对象状态 (或聚合类) 保存在缓存中,下次需要使用对象的时候,可以先检查该状态有无变化,有变化则重新转载状态类,无责直接用。
实例:(下次思考)
推广:使用 缓存使 业务 和 持久 异步。(下次思考)
思考:使用缓存 业务和持久异步产生的 同步 问题,在大量数据的情况下 缓存性能问题。(下次思考)

fxltsbl3855
2009-10-15 14:30
就factory pattern技术本身其实没啥,就一个接口实现和抽象类继承
最重要的还是
把握业务对象的共同点和不同点,以及将来有可能出现的变化
然后才能设计出健壮的架构