1. 工厂模式概述
在工厂模式中,创建对象不会对外界暴露创建逻辑,而是通过使用一个共同的接口来获取新创建的对象。在工厂模式中,不需要外界手动创建一个实例,而是通过调用对象工厂的方法,返回该类的实例。
比如我现在想获取一个产品,我只需要调用这个产品的工厂的方法就可以了。
(1) 适用情况 需要根据不同的条件,创建不同的实例对象时,可以考虑使用工厂模式。
(2) 优点
- 对于调用者来说,不必关心实例的创建方式,这样可以屏蔽产品的具体实现
- 拓展性高,如果需要增加一个产品,只需要拓展一个工厂类就可以
2. 工厂模式实现 现在我们需要一个汽车工厂,用来创建不同品牌的汽车对象。
(1) 先声明一个汽车接口
public interface Car {
void declare();
}
(2) 创建各个品牌汽车的实现类
public class Benz implements Car{
@Override
public void declare() {
System.out.println("我是一辆奔驰。");
}
}public class BMW implements Car{
@Override
public void declare() {
System.out.println("我是一辆宝马。");
}
}public class Audi implements Car{
@Override
public void declare() {
System.out.println("我是一辆奥迪。");
}
}
(3) 创建汽车工厂
public class CarFactory {
/**
* 生产汽车
*
* @param brand 汽车品牌
* @return 汽车
*/
public Car buildCar(CAR_BRAND brand) {
switch (brand) {
case BENZ:
return new Benz();
case BMW:
return new BMW();
case AUDI:
return new Audi();
}
return null;
}
}enum CAR_BRAND {
BENZ,
BMW,
AUDI
}
(4) 使用汽车工厂生产汽车
public class FactoryDemo {
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
// 生产一辆奔驰
Car benz = carFactory.buildCar(CAR_BRAND.BENZ);
benz.declare();
// 生产一辆宝马
Car bmw = carFactory.buildCar(CAR_BRAND.BMW);
bmw.declare();
// 生产一辆奥迪
Car audi = carFactory.buildCar(CAR_BRAND.AUDI);
audi.declare();
}
}
运行结果:
文章图片
参考鸣谢 【设计模式——工厂模式】工厂模式:https://www.runoob.com/design...
推荐阅读
- 面试|我经历的IT公司面试及离职感受(转)
- java|设计模式——创建型——工厂方法(Factory Method)
- 设计模式|设计模式_创建型模式——工厂方法
- 设计模式|设计模式——创建型软件设计模式——工厂方法模式
- 设计模式之装饰器模式
- 设计模式之设计原则
- 设计模式六大原则(5)(迪米特法则 最少知道)
- 观察者模式实现之EventBus(Google)
- Java高级面试|常见设计模式——装饰模式
- java设计模式——单例模式