1. 工厂模式介绍
常见的工厂模式:
-
简单工厂模式(Factory)
不属于 23 种设计模式之一
- 工厂方法模式(Factory Method)
- 抽象工厂模式(Abstract Factory)
2. 简单工厂模式(创建型)
简单工厂模式又称静态工厂方法模式,不属于23中设计模式之一。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
Spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 Bean 对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
类图:
实现步骤:
- 创建一个Phone接口
public interface Phone {
public String getName();
}
- 创建HuaWei类实现Phone接口
public class HuaWei implements Phone {
@Override
public String getName() {
return "华为手机";
}
}
- 创建XiaoMi类实现Phone接口
public class XiaoMi implements Phone {
@Override
public String getName() {
return "小米手机";
}
}
- 创建PhoneFactory工厂类用于创建具体手机
public class PhoneFactory {
public static Phone getPhone(String name) {
if (name.equals("HuaWei")) {
return new HuaWei();
} else if (name.equals("XiaoMi")) {
return new XiaoMi();
}else {
System.out.println("不存在该手机");
return null;
}
}
}
- 使用PhoneFactory创建具体手机
public class Main {
public static void main(String[] args) {
// write your code here
Phone phone = PhoneFactory.getPhone("HuaWei");
System.out.println(phone.getName());
}
}
输出:
华为手机
3. 工厂方法模式(创建型)
通常由应用程序直接使用 new 创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。我们只需要告诉工厂我们需要什么,具体怎么创建的,创建过程我们不需要管,我们只需要拿到结果。
类图:
实现步骤:
- 创建手机工厂接口,规定要制作手机必须遵循的规范。
public interface PhoneFactory {
public Phone getPhone();
}
- 华为工厂需要生产手机供用户使用,所以需要实现PhoneFactory接口。创建华为手机工厂。
public class HuaWeiPhoneFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new HuaWei();
}
}
- 创建小米手机工厂
public class XiaoMiPhoneFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new XiaoMi();
}
}
- 通过工厂获取手机
public class Test {
public static void main(String[] args) {
PhoneFactory factory = new HuaWeiPhoneFactory();
System.out.println(factory.getPhone().getName());
}
}
输出:
华为手机
3. 抽象工厂模式(创建型)
抽象工厂模式相对于工厂方法模式更加灵活,易拓展。工厂方法模式提供的是对一个产品的等级模式,而抽象工厂方法提供的是对多个产品的等级模式,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的。在Spring中应用得最为广泛的一种设计模式。对于用户使用而言,更加简单了,用户只有选择的权利了,保证了程序的健壮性。在一定程度上违反了”开闭原则”。
类图:
实现步骤:
- 创建抽象工厂类
public abstract class AbstractFactory {
public abstract Phone getXiaoMi();
public abstract Phone getHuaWei();
}
- 创建手机工厂类继承抽象工厂类
public class PhoneFactory extends AbstractFactory {
@Override
public Phone getXiaoMi() {
return new XiaoMi();
}
@Override
public Phone getHuaWei() {
return new HuaWei();
}
}
- 通过手机工厂类创建小米手机
public class Test {
public static void main(String[] args) {
PhoneFactory factory = new PhoneFactory();
System.out.println(factory.getXiaoMi().getName());
}
}
输出:
小米手机
工厂模式中最最常用的是抽象工厂模式,也是最灵活的。
设计模式是程序员内功之一,切记不要死记硬背,用心理解。下篇将介绍单例模式。