设计模式——工厂模式

1. 工厂模式概述

在工厂模式中,创建对象不会对外界暴露创建逻辑,而是通过使用一个共同的接口来获取新创建的对象。
在工厂模式中,不需要外界手动创建一个实例,而是通过调用对象工厂的方法,返回该类的实例。
比如我现在想获取一个产品,我只需要调用这个产品的工厂的方法就可以了。
(1) 适用情况 需要根据不同的条件,创建不同的实例对象时,可以考虑使用工厂模式。
(2) 优点
  1. 对于调用者来说,不必关心实例的创建方式,这样可以屏蔽产品的具体实现
  2. 拓展性高,如果需要增加一个产品,只需要拓展一个工厂类就可以
(3) 缺点 如果产品过多,则工厂类也会过多,增加了系统的复杂度。
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...

    推荐阅读