标签:工厂 开发 抽象方法 抽象工厂 abstract 修改 新建 sim 业务
简单工厂的特点就是需要在工厂中做相应的判断来生产指定对象,对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。
abstract class Car{ abstract void run(); } class Benz extends Car{ String name; public Benz() { super(); } public Benz(String name) { super(); this.name = name; } void run() { System.out.println(name + " is running"); } } class Audi extends Car{ String name; public Audi() { super(); } public Audi(String name) { super(); this.name = name; } void run() { System.out.println(name + " is running"); } } public void simpleFactory(String type){ Scanner scan = new Scanner(System.in); type = scan.nextLine(); Car car = null; if("audi".equals(type)){ car = new Audi("audi"); }else if("benz".equals(type)){ car = new Benz("benz"); }else{ System.out.println("我们不生产"); } car.run(); scan.close(); }
于是工厂模式就诞生了。
所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
听起来很抽象,还是以刚才的例子解释。这家生产汽车产家赚了不少钱,于是决定再开设一个工厂专门用来生产奔驰,而原来的工厂专门用来生产奥迪。这时,客户要做的是找好工厂,比如要奥迪车,就找奥迪工厂要;否则找B工厂要,不再需要告诉工厂具体要什么型号的处理器核了。下面给出一个实现方案。
abstract class CarFactory{ abstract Car getCar(); } class AudiFactory extends CarFactory{ Car getCar() { return new Audi(); } } class BenzFactory extends CarFactory{ Car getCar() { return new Benz(); } } public void factory() { CarFactory audiFactory = new AudiFactory(); CarFactory benzFactory = new BenzFactory(); // 通过工厂对象创建相应的实例对象 Car audi = audiFactory.getCar(); Car benz = benzFactory.getCar(); }
抽象工厂模式它到底有什么作用呢?还是举这个例子,公司的壮大后,光生产小汽车不够,也要能生产巴士。现在简单工厂模式和工厂方法模式都鞭长莫及。抽象工厂模式登场了。它的定义为提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这家公司还是开设两个工厂,一个专门用来生产audi小汽车和巴士,而另一个工厂专门用来生产benz的小汽车和巴士,下面给出实现的代码。
abstract class Car{ } class BenzCar extends Car{ } class AudiCar extends Car{ } abstract class Bus{ } class BenzBus extends Bus{ } class AudiBus extends Bus{ } abstract class AbstractFactory{ abstract Car getCar(); abstract Bus getBus(); } class AudiFactory extends AbstractFactory{ Car getCar() { return new AudiCar(); } Bus getBus() { return new AudiBus(); } } class BenzFactory extends AbstractFactory{ Car getCar() { return new BenzCar(); } Bus getBus() { return new BenzBus(); } } public void factory(){ AbstractFactory audiFactory = new AudiFactory(); AbstractFactory benzFactory = new BenzFactory(); Car audiCar = audiFactory.getCar(); Bus audiBus = audiFactory.getBus(); Car benzCar = benzFactory.getCar(); Bus benzBus = benzFactory.getBus(); }
在抽象工厂模式中,假设我们需要增加一个工厂
假设我们增加宝马工厂,则我们需要增加宝马工厂继承抽象工厂。
之后创建宝马汽车继承汽车类,创建宝马巴士继承巴士类即可。
在抽象工厂模式中,假设我们需要增加一个产品
假设我们增加SUV这个产品,则首先我们需要增加SUV这个父类,新建两个AudiSuv和BenzSuv继承这个父类。
在抽象工厂中新增abstract Suv getSuv();这个抽象方法,让奥迪和奔驰工厂实现这个方法。
标签:工厂 开发 抽象方法 抽象工厂 abstract 修改 新建 sim 业务
原文地址:https://www.cnblogs.com/guofx/p/11376252.html