工厂模式
工厂模式说明:
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=newA() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
工厂方法的使用场景:
1. 客户类不关系使用哪个具体类,只关心该接口提供的功能,。
2. 创建过程比较复杂,如需要初始化其他关联资源时。
3. 接口有很多具体实现或者抽象类有很多具体子类时。
4. 不希望暴露给客户太多此类的内部结构与隐藏这些细节可以降低耦合度,这里说的客户是程序中的客户类。
5. 优化性能,比如缓存大对象或者初始化比较耗时的对象
UML类图(不是很规范,但是可以看出关系):
例子:
实例工程结构如下图,其实也没什么结构
在这个包中有7个Java文件。其中Factory、Product 是接口。Factory1和factory2实现了factory,并且在各自的内部实现创建产品的方法。proudct1和Proudct2实现Product,为了在代码运行后显示结构在各自的构造函数中加入了控制台输出函数,并没有加入什么实际的操作。
Mange类,控制类,负责创建factory实例,然后调用CreateProduct()来生产产品。
看描述理解不够直观,代码比较清晰
Product类:
package myfactory;
//产品接口,两个子类来实现,在子类的构造方法中分别执行自己的输出函数来标记
public interface Product {
}
package myfactory;
package myfactory;
Product1类:
public class Product1 implements Product {
public Product1()
{
System.out.println(">>>>>>>>>>>>创建prouduct1<<<<<<<<<<<<<<");
}
}
Factory接口:
package myfactory;
//工厂接口,包含创建产品方法,在实现它的两个子类中分别重载,来创建各自的产品
public interface Factory {
publicProduct CreateProduct();
}
Factory1类:
public class Factory1 implements Factory{
@Override
public Product CreateProduct() {
return new Product1();
}
}
Manage类
package myfactory;
//控制类,负责创建factory实例,然后调用CreateProduct()来生产产品
public class Manage {
//私有对象 factory
privateFactory factory;
//构造方法,把参数中的实例传到属性中,初始化
publicManage(Factory factory) {
this.factory= factory;
}
//创建factory实例,并执行CreateProduct();
public void Create(){
Productproduct1 = factory.CreateProduct();
}
//主方法,创建一个实例,然后去执行创造产品
publicstatic void main(String args[]){
//创建按产品1
Manage m1 = new Manage(new Factory1());
m1.Create();
创建按产品2
Manage m2 = new Manage(new Factory2());
m2.Create();
}
}
运行结果:
>>>>>>>>>>>>创建prouduct1<<<<<<<<<<<<<<
>>>>>>>>>>>>创建prouduct2<<<<<<<<<<<<<<
源代码:http://pan.baidu.com/s/1kUqTYqN