工厂模式之-简单工厂模式
简单工厂模式:
?
???? .目的?
?????? ?工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。
我现在要做一个动物园管理系统。
????????? 首先抽象一个animal接口:
package factory.simpleFactory;
/**
?*
?* @author Administrator
?*/
public interface Animal {
??? void eat();
}
?????
?
??? 然后创建实现了animal接口的具体实现类:
?
??? 1 Tiger 类??
package factory.simpleFactory;
/**
?*
?* @author Administrator
?*/
public class Tiger implements Animal{
??? public void eat() {
??????? System.out.println("老虎会吃");
??? }
??? public void run(){
??????? System.out.println("老虎会跑");
??? }
}
?
?
2?? haitui类:
?
package factory.simpleFactory;
/**
?*
?* @author Administrator
?*/
public class Haitun implements Animal{
??? public void eat() {
????? System.out.println("海豚会吃");
??? }
??? public void swming(){
??????? System.out.println("海豚会游泳");
??? }
}
?
?
3?? yingwu类
package factory.simpleFactory;
/**
?*
?* @author Administrator
?*/
public class Yingwu implements Animal {
??? public void eat() {
??????? System.out.println("鹦鹉会吃");
??? }
??? public void flay() {
??????? System.out.println("鹦鹉会飞");
??? }
}
?
?
然后我要创建一个animal的工厂类。该工厂类根据传入的参数生成具体的animal子类实例。其中用到反射机制。
?
?
public class AnimalFactory {
??? public?? Animal newAnimal(String name) {
??????? Animal animal = null;
??????? try {
??????????? animal = (Animal) (Class.forName(name).newInstance());
??????? } catch (Exception ex) {
??????????? Logger.getLogger(AnimalFactory.class.getName()).log(Level.SEVERE, null, ex);
??????? }
??????? return animal;
??? }
}
?
?
?
好了,现在我们就可以来使用他们了。测试代码传上::
?
?
public class TestAnimal {
??? public static void main(String[] args) {
??????? AnimalFactory af = new AnimalFactory();
??????? Animal tiger = af.newAnimal("factory.simpleFactory.Tiger");
??????? tiger.eat();
??????? Animal haitun = af.newAnimal("factory.simpleFactory.Haitun");
??????? haitun.eat();
??????? Animal yingwu = af.newAnimal("factory.simpleFactory.Yingwu");
??????? yingwu.eat();
??? }
}
?
?
输出:
?
老虎会吃
海豚会吃
鹦鹉会吃
?
这就是简单工厂模式。用来大批量生产animal。
?
注意:如果要生产的实例又分好多种情况。如 tiger老虎又分为华南虎,华北虎等。怎么办。这时简单工厂模式就不能满足要求了。
?
要想解决这个问题。请看? 【工厂方法模式】
?
?
?
?
?
?