工厂模式(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();
}
}