一、简单工厂模式
就是建立一个工厂类,对实现了同一接口或抽象类的一些类进行实例的创建。
public interface Fruit {
public void create();
}
public class Apple implements Fruit {
@Override
public void create() {
System.out.println("apple created.");
}
}
public class Orange implements Fruit {
@Override
public void create() {
System.out.println("orange created.");
}
}
public class SimpleFactory {
public static Fruit createFruit(String type) {
if("apple".equals(type)) {
return new Apple();
}
else if("orange".equals(type)) {
return new Orange();
}
return null;
}
}
public class Test {
public static void main(String[] args) {
Fruit f = SimpleFactory.createFruit("orange");
f.create(); //orange created.
f = SimpleFactory.createFruit("apple");
f.create(); //apple created.
}
}
二、工厂方法模式
在简单工厂模式中,如果传递的字符串出错,则不能正确创建对象,而工厂方法模式是提供多个工厂方法,分别创建对象。
public class MethodFactory {
public static Fruit createApple() {
return new Apple();
}
public static Fruit createOrange() {
return new Orange();
}
}
Fruit f2 = MethodFactory.createApple();
f2.create(); //apple created.
f2 = MethodFactory.createOrange();
f2.create(); //orange created.
三、抽象工厂模式
工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
public interface Fruit {
public void print();
}
public class Apple implements Fruit {
@Override
public void print() {
System.out.println("apple created.");
}
}
public class Orange implements Fruit {
@Override
public void print() {
System.out.println("orange created.");
}
}
public interface Factory {
public Fruit create();
}
public class AppleFactory implements Factory {
@Override
public Fruit create() {
return new Apple();
}
}
public class OrangeFactory implements Factory {
@Override
public Fruit create() {
return new Orange();
}
}
public class Test {
public static void main(String[] args) {
Factory f = new AppleFactory();
f.create().print(); //apple created.
f = new OrangeFactory();
f.create().print(); //orange created.
}
}