静态工厂模式

静态工厂模式就是用静态方法实现的,其创建的对象具有一定的特性,譬如说是某类的派生或者某接口的实现;如:

 

Animal 类:
package shejimoshi.factoryMoShi.staticFactory;

public abstract class Animal {
	private String name;

	public Animal() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Animal(String name) {
		super();
		this.name = name;
	}

	public abstract void eat();

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

Cat 类

package shejimoshi.factoryMoShi.staticFactory;

public class Cat extends Animal {

	public Cat() {
		// TODO Auto-generated constructor stub
	}

	public Cat(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void eat() {
		System.out.println("I like to eat fish!");
	}

}

  

Dog 类:

package shejimoshi.factoryMoShi.staticFactory;

public class Dog extends Animal {

	public Dog() {
		// TODO Auto-generated constructor stub
	}

	public Dog(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void eat() {
		System.out.println("I like to eat bone!");
	}

}

  

StaticFactory 类:

package shejimoshi.factoryMoShi.staticFactory;

/**
 * 静态工厂创建一个对象 静态工厂类产生的对象一般都有共同的特性,继承某一类,或者引用接口之类,在此
 * 没有看似没有,但不可否认他们都是Object或者Object的一个子类
 */
public class StaticFactory {
	public static Object getInstance(String className) {
		if ("英短".equals(className)) {
			return new Cat();
		} else if ("拉布拉多".equals(className)) {
			return new Dog();
		} else {
			return null;
		}
	}

	/*public static Object getInstance(String className, Object... agrs) {
		Class cls = null;
		try {
			cls = Class.forName(className);
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			return null;
		}
		Constructor[] constructors = cls.getConstructors();
		Object instance = null;
		for (Constructor cons : constructors) {
			Class<?>[] clses = cons.getParameterTypes();
			if (clses.length > 0) {
				boolean isThisConstructor = true;
				for (int i = 0; i < clses.length; i++) {
					Class c = clses[i];
					if (!c.isInstance(agrs[i])) {
						isThisConstructor = false;
					}
				}
				if (isThisConstructor) {
					try {
						instance = cons.newInstance(agrs);
						break;
					} catch (IllegalArgumentException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InvocationTargetException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InstantiationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else {
					continue;
				}

			}
		}
		return instance;
	}*/
}

  

Test 类:

package shejimoshi.factoryMoShi.staticFactory;

public class Test {
	public static void main(String[] args) {
		//调用getInstance()方法,返回的是一个cat/dog对象
		Cat cat = (Cat) StaticFactory.getInstance("英短");
		cat.eat();
		System.out.println(cat);
	}
}

  

  

posted @ 2018-03-07 09:31  qqyong  阅读(174)  评论(0编辑  收藏  举报