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

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技术本身其实没啥,就一个接口实现和抽象类继承

最重要的还是

把握业务对象的共同点和不同点,以及将来有可能出现的变化

然后才能设计出健壮的架构