工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式是一种实例化对象的模式,工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象父类并且实现了父类中的方法,这些方法针对不同的数据进行不同的操作。
简单工厂模式:也可以叫做静态工厂方法,属于类创建型模式,根据不同的参数,返回不同的类实现。 定义产品接口
public interface Car { /** * 接口run方法 */ public void run(); }定义工厂类
package com.jbc.factory; import com.jbc.itface.Car; /** * 工厂模式 * 1.简单工厂模式 * @author sharbee * */ public class CarFactory { //通过调用工厂类来实现创建对象实例的目的,然后调用对应实现类的方法 public static Car createCar(String carType){ if("本田".equals(carType)){ return new Hev(); }else if("比亚迪".equals(carType)){ return new Byd(); }else{ return null; } } }定义接口实现类
package com.jbc.factory; import com.jbc.itface.Car; public class Byd implements Car{ @Override public void run() { System.out.println("比亚迪车..."); } } package com.jbc.factory; import com.jbc.itface.Car; public class Hev implements Car{ @Override public void run() { System.out.println("本田车..."); } }简单工厂模式测试
public class TestSimpleFactoryPattern { public static void main(String[] args) { Car c1 =CarFactory.createCar("本田");//相当于通过工厂创建实例 Car c2 =CarFactory.createCar("比亚迪"); c1.run(); c2.run(); } }工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。 定义产品接口
package com.jbc.itface; public interface Car { /** * 接口run方法 */ public void run(); }定义产品实现类
package com.jbc.factory; import com.jbc.itface.Car; public class Byd implements Car{ @Override public void run() { System.out.println("比亚迪车..."); } } package com.jbc.factory; import com.jbc.itface.Car; public class Hev implements Car{ @Override public void run() { System.out.println("本田车..."); } }定义工厂接口
package com.jbc.itface; public interface CarFactory { /** * 定义一个总的工厂接口,下面定义具体的产品工厂实现这个工厂进而获取对象实例 * 优点:相比于简单工厂模式来说,不用修改代码,当有新的产品时,可以再继续添加产品 */ public Car getCar(); }创建工厂接口实现类
package com.jbc.factory; import com.jbc.itface.Car; import com.jbc.itface.CarFactory; public class CarMethodFactory_Byd implements CarFactory{ @Override public Car getCar() { return new Byd(); } } package com.jbc.factory; import com.jbc.itface.Car; import com.jbc.itface.CarFactory; public class CarMethodFactory_Hev implements CarFactory{ @Override public Car getCar() { return new Hev(); } }测试工厂方法模式
package com.jbc.test; import com.jbc.factory.CarMethodFactory_Byd; import com.jbc.factory.CarMethodFactory_Hev; import com.jbc.itface.Car; public class TestMethodFactoryPattern { public static void main(String[] args) { Car c1 =new CarMethodFactory_Hev().getCar(); Car c2 =new CarMethodFactory_Byd().getCar(); c1.run(); c2.run(); } }