简单工厂模式的三种实现
简单工程代码实现
定义Animal接口
public interface Animal {
public void eat();
}
建立具体的Animal实现类
public class Dog implements Animal {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("*****狗*****吃");
}
}
public class Pig implements Animal {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("*****猪*****吃");
}
}
Enum枚举类型的定义
public enum AnimalType {
//参数为类名的全路径 形如 com.dm.dog
//本例都在一个默认包下
DOG("Dog"),
PIG("Pig");
private String value;
private AnimalType(String value){
this.value=value;
}
public String getValue(){
return value;
}
}
简单工程类的三种方法的不同实现
public class SimpleFactory {
//简单工厂模式 普通 实现1
public static Animal creatEatOperation1(String animalName){
if(animalName.equalsIgnoreCase("dog")){
return new Dog();
}else if(animalName.equalsIgnoreCase("pig")){
return new Pig();
}
return null;
}
//简单工厂模式 实现2 与实现1基本一样 大同小异(仅适合无参构造函数)
public static Animal creatEatOperation2(String animalName) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
if(animalName.equalsIgnoreCase("dog")){
return Dog.class.newInstance();
}else if(animalName.equalsIgnoreCase("pig")){
return Pig.class.newInstance();
}
return null;
}
//简单工厂模式 实现3 通过加入enum实现工厂类代码无需更改 (仅适合无参构造函数)
public static Animal creatEatOperation3(AnimalType animalType) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
if(!animalType.getValue().equals("")){
return (Animal)Class.forName(animalType.getValue()).newInstance();
}
return null;
}
}
测试类的实现和结果
public class Test {
public static void main(String[] args){
System.out.println("----------方法1实现---------------");
Animal dog1=SimpleFactory.creatEatOperation1("dog");
Animal pig1=SimpleFactory.creatEatOperation1("pig");
dog1.eat();
pig1.eat();
System.out.println("----------方法2实现---------------");
try{
Animal dog2=SimpleFactory.creatEatOperation2("dog");
Animal pig2=SimpleFactory.creatEatOperation2("pig");
dog2.eat();
pig2.eat();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("----------方法3实现---------------");
try{
Animal dog3=SimpleFactory.creatEatOperation3(AnimalType.DOG);
Animal pig3=SimpleFactory.creatEatOperation3(AnimalType.PIG);
dog3.eat();
pig3.eat();
}catch(Exception e){
e.printStackTrace();
}
}
}