定义
工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点
简单工厂模式又称静态工厂模式,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 GoF 23 种设计模式之列。(定义来源百度)
模式的结构与类图
结构
简单工厂模式主要包含以下角色:
- 抽象产品:定义产品的规范,描述了产品的主要特性和功能。
- 具体产品:实现或者继承产品的子类。
- 具体工厂:提供了创建产品的方法,调用者通过该方法获取产品。
类图
具体代码如下:
/**
* 抽象产品
*/
public interface Phone {
String getName();
void call();
}
/**
* 具体产品
*/
public class HuaweiPhone implements Phone {
@Override
public String getName() {
return "华为手机...";
}
@Override
public void call() {
System.out.println("华为手机打电话...");
}
}
/**
* 具体产品2
*/
public class XiaomiPhone implements Phone {
@Override
public String getName() {
return "小米手机...";
}
@Override
public void call() {
System.out.println("苹果手机打电话...");
}
}
/**
* 具体工厂
*/
public class PhoneFactory {
public Phone createPhone(String type){
if("xiaomi".equals(type)){
return new XiaomiPhone();
}else{
return new HuaweiPhone();
}
}
}
测试类代码如下:
public class MainTest {
public static void main(String[] args){
PhoneFactory phoneFactory = new PhoneFactory();
Phone huawei = phoneFactory.createPhone("huawei");
System.out.println(huawei.getName());
huawei.call();
Phone apple = phoneFactory.createPhone("xiaomi");
System.out.println(apple.getName());
apple.call();
}
}
运行结果如下:
华为手机…
华为手机打电话…
小米手机…
苹果手机打电话…
优缺点
简单工厂的代码很简单,就是将对象的创建和业务逻辑分开。这可以看做是简单工厂模式的优点。新增产品是无需修改业务代码,只需修改工厂类添加新的产品,这恰恰是简单工厂模式的缺点,违背了开闭原则。所以有新的产品时,修改并不是那么方便。工厂方法模式就是针对此缺点进行改进,在下面的篇章中会讲到。