简单工厂模式的概念
就是创建一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的是实质是由一个工厂类根据传入的参数,动态决定应该的创建哪一产品类的实例。
简单工厂模式的代码:
/**
* 产品的抽象接口 人类
*
*/
public interface Human {
public void say();
}
然后定义男人和女人,同样有说话的方法。
/**
* man 男人
*/
public class Man implements Human {
@Override
public void say() {
System.out.println("男人");
}
}
/*女人
*/
public class Woman implements Human {
@Override
public void say() {
System.out.println("女人");
}
}
写一个工厂类,用来创建男人和女人
第一种方法是使用逻辑判断的方法实现的
/**
* 简单工厂
*
*/
public class SampleFactory {
public static Human makeHuman(String type){
if(type.equals("man")){
Human man = new Man();
return man;
}else if(type.equals("womman")){
Human woman = new Woman();
return woman;
}else{
System.out.println("生产不出来");
return null;
}
}
}
第二种方法是使用放射实现的,我觉得这一类的实现方式比较好。
/**
* 简单工厂放射实现
*
*/
public class SampleFactory1 {
public static Human makeHuman(Class c){
Human human = null;
try {
human = (Human) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
System.out.println("不支持抽象类或接口");
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("没有足够权限,即不能访问私有对象");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("类不存在");
e.printStackTrace();
}
return human;
}
}
创建测试类
/**
* 简单工厂测试
*
*/
public class Client {
public static void main(String[] args) {
// Human man = SampleFactory.makeHuman("man");
// man.say();
// Human womman = SampleFactory.makeHuman("womman");
// womman.say();
// Human test = SampleFactory.makeHuman("tttt");
Human man = SampleFactory1.makeHuman(Man.class);
man.say();
Human woman = SampleFactory1.makeHuman(Woman.class);
woman.say();
}
}