工厂模式非常适合用来创建对象。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
创建公共接口:
public interface Person {
void work();
}
public class Man implements Person{
@Override
public void work() {
System.out.println("男人:耕地");
}
}
public class Woman implements Person{
@Override
public void work() {
System.out.println("女人:织布");
}
}
创建工厂
public class PersonFactory {
public Person getPerson(String type){
if(type == null){
return null;
}
if(type.equalsIgnoreCase("man")){
return new Man();
}else if(type.equalsIgnoreCase("woman")){
return new Woman();
}
return null;
}
}
测试:
public class FactoryPatternDemo {
public static void main(String[] args) {
PersonFactory personFactory = new PersonFactory();
Person man = personFactory.getPerson("man");
man.work();
Person woman = personFactory.getPerson("woman");
woman.work();
}
}
输出:
System.out: 男人:耕地
System.out: 女人:织布
下面还有一种的方式:采用反射的方式来实现生产具体的产品对象,这样更加简洁,不用为每一个产品都创建一个具体的工厂。
他的工厂类如下:
public class PersonFactory {
public <T extends Person> T createProduct(Class<T> clz) {
Person p = null;
try {
p = (T) Class.forName(clz.getName()).newInstance();
}catch (Exception e) {
e.printStackTrace();
}
return (T) p;
}
}
测试如下:
public class Test {
public static void main(String[] args) {
PersonFactory personFactory = new PersonFactory();
Person man = personFactory.createProduct(Man.class);
Person woman = personFactory.createProduct(Woman.class);
man.work();
woman.work();
}
}