创建对象之Factory (工厂)
2009-08-15 02:33
246 查看
Factory有两种理解方式,个人感觉不太一样,不知道哪种理解方式比较正确
1、引入Factory Pattern的目的是为了封装类的实例化操作
public class Factory{
public static Sample creator(int which){
//getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那么在你的程序中,如果要实例化Sample时.就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误
2、Factory Pattern在父类规定对象的创建方法,但不深入到具体的类名,所有具体的实现都放在了子类,大致可以分为产生对象实例的大纲(框架)和实际产生对象实例的类两方面
实例:
framework中的Factory是实现creat的抽象类
public final Product creat(String owner) {
Product p = creadProduct(owner);
registerProduct(p);
return p;
}
public abstract Product creadProduct(String owner);
famework中的Product是仅实现use方法的抽象类
具体的生成和使用方法都用idcard中的类具体实现
IDcardFactory:
IDcardFactory extends Factory
public synchronized Product creadProduct(String owner) {
IDcard ic = new IDcard(owner);
return ic;
}
IDcarrd:
class IDcard extends Product
IDcard(String owner) {
System.out.println("建立" + owner +"的卡");
this.owner = owner;
}
此处构造函数不是public 只有通过同一个包中的factory才可以产生这个对象实例
public void use() {
System.out.println("使用" + owner + "的卡");
}
具体使用:
public static void main(String[] args) {
Factory fc = new IDcardFactory();
Product p1 = fc.creat("card1");
Product p2 = fc.creat("card2");
Product p3 = fc.creat("card3");
p1.use();
p2.use();
p3.use();
}
这样不必修改framework包中的内容就能够创建出不同的产品和工厂
1、引入Factory Pattern的目的是为了封装类的实例化操作
public class Factory{
public static Sample creator(int which){
//getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那么在你的程序中,如果要实例化Sample时.就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误
2、Factory Pattern在父类规定对象的创建方法,但不深入到具体的类名,所有具体的实现都放在了子类,大致可以分为产生对象实例的大纲(框架)和实际产生对象实例的类两方面
实例:
framework中的Factory是实现creat的抽象类
public final Product creat(String owner) {
Product p = creadProduct(owner);
registerProduct(p);
return p;
}
public abstract Product creadProduct(String owner);
famework中的Product是仅实现use方法的抽象类
具体的生成和使用方法都用idcard中的类具体实现
IDcardFactory:
IDcardFactory extends Factory
public synchronized Product creadProduct(String owner) {
IDcard ic = new IDcard(owner);
return ic;
}
IDcarrd:
class IDcard extends Product
IDcard(String owner) {
System.out.println("建立" + owner +"的卡");
this.owner = owner;
}
此处构造函数不是public 只有通过同一个包中的factory才可以产生这个对象实例
public void use() {
System.out.println("使用" + owner + "的卡");
}
具体使用:
public static void main(String[] args) {
Factory fc = new IDcardFactory();
Product p1 = fc.creat("card1");
Product p2 = fc.creat("card2");
Product p3 = fc.creat("card3");
p1.use();
p2.use();
p3.use();
}
这样不必修改framework包中的内容就能够创建出不同的产品和工厂
相关文章推荐
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
- AutomationFactory.CreateObject("Excel.Application")无法为指定的ProgID创建对象实例
- java反射创建工厂对象
- C#面向对象设计模式纵横谈(四) --- Factory Method 工厂方法(创建型模式)
- 以boost factory & boost function实现对象工厂设计模式
- 设计模式-3.3 Factory Method(工厂方法) 对象创建型模式
- 使用DAO工厂创建实现类对象
- Spring创建对象的三种方法之二静态工厂创建(源码)
- MyBatis 配置文件以及SqlSessionFactory对象的创建
- 创建模式:Factory Method工厂模式
- 第1条:考虑用静态工厂方法代替构造器(第一章:创建和销毁对象)
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- 工厂模式解决如何不通过new来创建实例对象的方法
- JavaScript中创建对象的方法:工厂模式,构造函数模式, 原型模式
- 集中创建多个对象-简单工厂模式
- spring通过代理工厂创建代理对象
- mybatis(七)对象工厂(objectFactory)插件(plugins)
- 动态创建对象演示代码MenuFunction ClassFactory FormRun ReportRun