工厂设计模式分为三类:简单工厂设计模式,工厂方法设计模式,抽象工厂设计模式
工厂设计模式的核心本质:
实例化对象,用工厂方法代替new操作;
将选择的实例化类和创建者进行统一地管理,实现调用者和实现类的解耦操作
也就是说实现分工合作,依赖从具体到抽象,不依赖于具体实现,便于扩展
今天先介绍简单工厂设计模式
简单工厂设计模式是比较常用的工厂设计模式
要求:消费者需要得到两类车:奥迪和比亚迪,用代码实现
(1) 首先说明在没有工厂设计模式的情况下的思路
Car接口
Car.java
public interface Car{
void run();
}
比亚迪类实现Car接口
Byd.java
public class Byd implements Car {
@Override
public void run() {
System.out.println( "byd run" );
}
}
奥迪类实现Car接口
Audi.java
public class Audi implements Car{
@Override
public void run() {
System.out.println( "audi run" );
}
}
调用者,也是消费者,生产比亚迪和奥迪汽车
Client02.java
public class Client02 {
public static void main(String[] args){
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
}
}
在上述这种情况下,对于Client02,也即调用者来说,需要比亚迪和奥迪的生产,也就是说,调用者依赖Car接口、Byd类、Audi类,太依赖具体的实现类,不能实现有效的分工,相关的类图关系如图所示:
(2) 使用简单工厂设计模式实现
CarFactory.java
public class CarFactory {
// public static Car createCarFactory(String type){
// if ("audi".equals( type )){
// return new Audi();
// }
// if ("byd".equals( type )){
// return new Byd();
// }
// return null;
// }
public static Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}
只需将上面的Client02.java文件换成如下的Client01.java文件
Client01.java
public class Client01 {
public static void main(String[] args){
Car c1 = CarFactory.createAudi();
Car c2 = CarFactory.createByd();
c1.run();
c2.run();
}
}
在简单工厂设计模式中,在增加了CarFactory类之后,CarFactory只负责创建audi和byd,而调用者只需要调用CarFactory就好,实现了更明确的分工,其类关系如下所示:
虽然整体关系比(1)中复杂,但是调用者的工作简单了,而且更具有扩展性。