分为三类:
简单工厂模式(sipple factory)
也叫静态工厂模式,一般是具体产品的继承类或者是接口的实现,如下拿一个司机开多种车的例子。传参确定车的类型。
package com.eddy.test.factory.demo1; /** * Created by eddy on 2015/10/15. */ public interface Car { public void drive(); }
package com.eddy.test.factory.demo1; /** * Created by eddy on 2015/10/15. */ public class BaoMaCar implements Car { @Override public void drive() { System.out.println("BaoMaCar"); } }
package com.eddy.test.factory.demo1; /** * Created by eddy on 2015/10/15. */ public class BenChiCar implements Car { @Override public void drive() { System.out.println("BenChiCar"); } }
package com.eddy.test.factory.demo1; /** * Created by eddy on 2015/10/15. */ public class QQCar implements Car { @Override public void drive() { System.out.println("QQCar"); } }
其工厂类。
package com.eddy.test.factory.demo1; /** * Created by eddy on 2015/10/15. */ public class FactoryStatic { public static Car getCar(String carName){ if(carName.equalsIgnoreCase("QQCar")){ return new QQCar(); }else if(carName.equalsIgnoreCase("BaoMaCar")){ return new BaoMaCar(); }else if(carName.equalsIgnoreCase("BenChiCar")){ return new BenChiCar(); } return null; } public static void main(String[] args){ //传参确定车的类型。 Car baoMaCar = FactoryStatic.getCar("BaoMaCar"); baoMaCar.drive(); } }
工厂方法模式(factory method)
如上,如果是一部车对应一个司机的话,可先要叫得这个司机,然后再去取车子,开宝马的司机去开宝马,开奔驰的司机去开奔驰。
package com.eddy.test.factory.demo2; /** * Created by eddy on 2015/10/15. */ public interface Driver { public Car driveCar(); }
package com.eddy.test.factory.demo2; /** * Created by eddy on 2015/10/15. */ public class BaoMaDriver implements Driver { @Override public Car driveCar() { return (Car) new BaoMaDriver(); } }
package com.eddy.test.factory.demo2; import com.eddy.test.factory.demo1.QQCar; /** * Created by eddy on 2015/10/15. */ public class QQDriver implements Driver { @Override public Car driveCar() { return (Car) new QQCar(); } }
package com.eddy.test.factory.demo2; import com.eddy.test.factory.demo1.BaoMaCar; /** * Created by eddy on 2015/10/15. */ public class BenChiDriver implements Driver { @Override public Car driveCar() { return (Car) new BaoMaCar(); } public static void main(String[] args){ //找到开宝马的司机 BaoMaDriver baoMaDriver = new BaoMaDriver(); //叫他去开宝马 Car car = baoMaDriver.driveCar(); car.drive(); } }
浙公网安备 33010602011771号