工厂方法模式分为三种:
一、普通工厂模式,就是创建一个工厂类,对实现了同一接口的一些类进行实例的建立
ide
interface Animal { // 定义一个动物的接口 public void say(); // 说话方法 } class Cat implements Animal { // 定义子类Cat @Override public void say() { // 覆写say()方法 System.out.println("我是猫咪,喵!"); } } class Dog implements Animal { // 定义子类Dog @Override public void say() { // 覆写say()方法 System.out.println("我是小狗,汪!"); } } class Factory { // 定义工厂类 public static Animal getInstance(String className) { Animal a = null; // 定义接口对象 if ("Cat".equals(className)) { // 判断是哪一个子类的标记 a = new Cat(); // 经过Cat子类实例化接口 } if ("Dog".equals(className)) { // 判断是哪一个子类的标记 a = new Dog(); // 经过Dog子类实例化接口 } return a; } public static Animal getInstance2(Object object) { Animal a = null; // 定义接口对象 if (object instanceof Cat) { // 判断是哪一个子类的标记 a = new Cat(); // 经过Cat子类实例化接口 } if (object instanceof Dog) { // 判断是哪一个子类的标记 a = new Dog(); // 经过Dog子类实例化接口 } return a; } } public class FactoryDemo { public static void main(String[] args) { Animal a = null; // 定义接口对象 a = Factory.getInstance("Dog"); // 经过工厂获取实例 if (a != null) { // 判断对象是否为空 a.say(); // 调用方法 } a=Factory.getInstance2(new Dog()); if (a != null) { // 判断对象是否为空 a.say(); // 调用方法 } } }
2.工厂方法模式,工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里再也不只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去作测试
//抽象产品角色 public interface Moveable { void run(); } //具体产品角色 public class Plane implements Moveable { @Override public void run() { System.out.println("plane...."); } } //具体产品角色 public class Broom implements Moveable { @Override public void run() { System.out.println("broom....."); } } //抽象工厂 public abstract class VehicleFactory { abstract Moveable create(); } //具体工厂 public class PlaneFactory extends VehicleFactory{ public Moveable create() { return new Plane(); } } //具体工厂 public class BroomFactory extends VehicleFactory{ public Moveable create() { return new Broom(); } } //测试类 public class Test { public static void main(String[] args) { VehicleFactory factory = new BroomFactory(); Moveable m = factory.create(); m.run(); } }