工厂 顾名思义 制造东西的地方,而我们的工厂模式也是用来创建对象的。定义一个创建对象的接口,让子其类来决定创建那个对象。工厂模式的现实中的使用,一般是当我们有很多相似的需求的时候,通过抽象公共部分来实现高效的编码。
/**
* 作者:chs on 2016/3/7 14:12
* 邮箱:657083984@qq.com
* 抽象的工厂
*/
public interface Factory {
/**
* 根据材料来创建产品
* @param material
*/
public abstract Product createProtect(String material);
}
package com.chs.myfactory;
/**
* 作者:chs on 2016/3/7 14:34
* 邮箱:657083984@qq.com
* 产品
*/
public abstract class Product {
protected String name;
}
package com.chs.myfactory;
/**
* 作者:chs on 2016/3/7 15:26
* 邮箱:657083984@qq.com
*/
public class Product1 extends Product {
private String name;
public Product1() {
this.name = "我是第一种产品";
}
}
package com.chs.myfactory;
/**
* 作者:chs on 2016/3/7 15:26
* 邮箱:657083984@qq.com
*/
public class Product2 extends Product {
private String name;
public Product2() {
this.name = "我是第二种产品";
}
}
根据传入值来确定创建哪个子类的对象。
package com.chs.myfactory;
/**
* 作者:chs on 2016/3/7 15:19
* 邮箱:657083984@qq.com
*/
public class MyFactory implements Factory {
private static MyFactory instance;
private MyFactory(){}
public static MyFactory getInstance(){
if(instance==null){
synchronized (MyFactory.class){
if(instance==null){
return new MyFactory();
}
}
}
return instance;
}
@Override
public Product createProtect(String material) {
Product product = null;
if(material.equals("1")){
product = new Product1();
}else {
product = new Product2();
}
return product;
}
}
MyFactory.getInstance().createProtect("1");