public interface Animal {
void say(); }
public class Cat implements Animal { @Override public void say() { System.out.println("miao miao miao"); } }
public class Dog implements Animal { @Override public void say() { System.out.println("wang wang wang"); } }
public class Duck implements Animal {
@Override public void say() { System.out.println("ga ga ga"); } }
public class AnimalFactory { /** * 此方法为工厂方法模式, * 特点为: * 创建了一个对象 * 返回类型为一个接口或者抽象类 * 有多个类实现了上述抽象类型 * @param color * @return */ public Animal getAnimal(String color) { if ("dog".equals(color)) { return new Dog(); } else if ("cat".equals(color)) { return new Cat(); } else if ("duck".equals(color)) { return new Duck(); } else { return null; } } }
public class AnimalFactoryDemo {
public static void main(String[] args) { AnimalFactory af = new AnimalFactory(); Animal cat = af.getAnimal("cat"); cat.say(); Animal dog = af.getAnimal("dog"); dog.say(); Animal duck = af.getAnimal("duck"); duck.say(); }
}
工厂模式的使用场景
需要大量创建对象的工作,不同条件下要创建不同的对象,这些对象都是一个抽象类型的实现类对象
JDK中工厂模式的身影:
《设计模式Java手册》一书中提到,Iterable的子类型的iterator方法是典型的工厂方法模式的应用。我的理解,这里更应该是一个抽象工厂,当然,针对某一个具体的类,比如ArrayList,来说,它的iterator()方法,就是一个工厂方法。
/**
* JDK中工厂方法模式,iterator方法
* 来自《设计模式Java手册》
* @param args
*/
public static void main2(String[] args) {
List list = Arrays.asList(new String[]{"funasdf", "rocsdfd", "sparkkkasf"});
Iterator i = list.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
觉得这里的理解还是有些欠缺,等有新的收获再来回顾。
0 comments:
Post a Comment