一、用处:
使用工厂模式,我们在创建对象时不会对客户端暴露具体的创建细节,使用一个共同的接口,让其子类自己决定实例化哪一个工厂类。
二、使用:
1.创建一个接口
public interface Animal {
void eat();
}
2.创建接口的实现类
public class Lion implements Animal {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("我是狮子,我吃肉");
}
}
public class Cow implements Animal {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("我是牛,我吃草");
}
}
3.创建工厂类
public class AnimalFactory {
public Animal getAnimal(String AnimalType){
if(AnimalType == null){
return null;
}
if(AnimalType.equalsIgnoreCase("lion")){
return new Lion();
} else if(AnimalType.equalsIgnoreCase("cow")){
return new Cow();
}
return null;
}
}
4.测试
public class FactoryPatternDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnimalFactory animalFactory = new AnimalFactory();
Animal animal1 = animalFactory.getAnimal("lion");
animal1.eat();
Animal animal2 = animalFactory.getAnimal("cow");
animal2.eat();
}
}
5.输出
我是狮子,我吃肉
我是牛,我吃草
6.总结:定义一个接口或抽象类,对其做不同的实现。创建一个工厂类,动态返回不同的实例。主类中去持有该工厂引用,由其去代理对象创建行为。
抽象工厂则用工厂创建工厂。