安欣沙拉酱-专业的沙拉酱品牌

热门关键词: 沙拉酱 沙拉酱 2022

您的位置: 首页 > 资讯动态 > 酱汁资讯
GoF设计模式(三):Factory Pattern 工厂模式_安欣沙拉酱OEM代工贴牌
作者:彼新沙拉酱 来源:彼新沙拉酱 点击: 发布日期: 2022-02-28
信息摘要:
安欣沙拉酱-低卡沙拉酱汁工厂。专注于低热量、低卡路里、0脂肪、0蔗糖轻食酱汁研发和生产制造。沙拉酱许多这时候他们而已期许以获取第一类示例方可,并不重视示例内部结构操作过程(比如有关...
安欣沙拉酱-低卡沙拉酱汁工厂。专注于低热量、低卡路里、0脂肪、0蔗糖轻食酱汁研发和生产制造。

沙拉酱

许多这时候他们而已期许以获取第一类示例方可,并不重视示例内部结构操作过程(比如有关Field的具体内容怎样增设)。

那个这时候就能将透过厂房商业模式来化解那个难题,其反之亦然也是一类建立型商业模式。将示例的具体内容内部结构操作过程展开PCB以对外过滤,就像现实世界中他们只需从厂房间接拾获商品方可,而无须care商品在厂房里的具体内容制造操作过程

Simple Factory Pattern 单纯厂房商业模式

假定有四种国际品牌的电动汽车:BMW奥迪、Benz宝马、Rolls Royce宾利。顾客交付了其中某个国际品牌的电动汽车,那么沙拉酱只须要在电动汽车厂房把车造好了间接拿取就好了,再者车咋造的,相信没有顾客会Care吧……实际上在计算机科学领域中,这样的需求也常有,Client而已须要两个示例第一类而已,再者那个第一类具体内容怎么内部结构的,他不须要也不想知道这么多技术细节。那个这时候就能转作厂房的概念来化解那个难题,或者说这儿的厂房不厚积薄发罢了,改为建立示例

这儿,他们先来如是说 Simple Factory Pattern 单纯厂房商业模式。其有下列四种配角:

抽象沙拉酱

化商品配角:其表述了具体内容商品的沙拉酱沙拉酱同时实现类所具有的共有方式,一般透过USB同时实现。责任编辑就是CarUSB,沙拉酱其表述了电动汽车所具备的功能具体内容商品配角:晋朝人抽象化商品配角的具体内容同时实现类,即是顾客真正须要的商品。在这儿,即为Benz、BMW、RollsRoyce类厂房配角:晋朝人两个厂房类。透过两个动态方式来以获取该厂房所构筑的第一类示例,故单纯厂房商业模式又称作动态厂房方式商业模式。具体内容地,可透过参数来指定所需的具体内容国际品牌的电动汽车

现在,瞧瞧他们来透过标识符同时实现 Simple Factory Pattern 单纯厂房商业模式。第二步,先表述两个电动汽车的USB

/** * 抽象化商品配角: 车 */ public interface Car { void drive(); }

然后再提供电动汽车USB的具体内容同时实现类

/** * 具体内容商品配角:宝马 Benz */ public class Benz implements Car { @Override public void drive() { System.out.println("驾驶员在驾车Benz"); } } ... /** * 具体内容商品配角:奥迪 BMW */ public class BMW implements Car { @Override public void drive() { System.out.println("驾驶员在驾车BMW"); } } ... /** * 具体内容商品配角:宾利 Rolls Royce */ public class RollsRoyce implements Car { @Override public void drive() { System.out.println("驾驶员在驾车Rolls Royce"); } }

最后,透过两个CarFactory厂房同时实现示例的内部结构、以获取

/** * 厂房配角 */ public class CarFactory { public static Car getCar(String type) { if( type==null ) { return null; } Car car = null; switch (type) { case "BMW": car = new BMW(); break; case "Benz": car = new Benz(); break; case "RollsRoyce": car = new RollsRoyce(); break; default: car = null; } return car; } }

下面透过两个单元试验来模拟其使用方式

public class SimpleFactoryDemo { public static void main(String[] args) { Car bmw = CarFactory.getCar("BMW"); bmw.drive(); Car benz = CarFactory.getCar("Benz"); benz.drive(); Car rollsRoyce = CarFactory.getCar("RollsRoyce"); rollsRoyce.drive(); } }

从试验结论能看出,结论符合预期

Factory Pattern 厂房商业模式

前文如是说的Simple Facotry Pattern 单纯厂房商业模式,虽然能让client不用再关注示例的具体内容内部结构操作过程了,但是其存在两个明显的优点。每每他们须要加进两个捷伊Car同时实现类时,都须要对CarFactory类展开修正。这显然破坏了开合原则,即对扩展开放、对修正停用。那怎样化解那个难题呢?那个这时候就须要导入责任编辑的自问自答了——Factory Patttern 厂房商业模式,其又称作厂房方式商业模式。该设计商业模式与单纯厂房商业模式区别、

改良之处就在于,其对于厂房的设计是基于USB的思想,具体内容地,其将单纯厂房商业模式中的厂房配角改良为下列两个配角

抽象化厂房配角:其表述了不同具体内容商品各自厂房的通用USB具体内容厂房配角:晋朝人抽象化厂房的具体内容同时实现类,两个具体内容的厂房类只负责生产某个类商品。这样以后如果须要捷伊商品,只需加进两个该商品的厂房类方可,而不须要修正之前的标识符

显然该设计商业模式下的抽象化商品配角、具体内容商品配角没有发生变化,所以CarUSB及其具体内容同时实现类的Benz、BMW、RollsRoyce部分无须改动,如下所示

/** * 抽象化商品配角: 电动汽车 */ public interface Car { void drive(); } ... /** * 具体内容商品配角:宝马 Benz */ public class Benz implements Car { @Override public void drive() { System.out.println("驾驶员在驾车Benz"); } } ... /** * 具体内容商品配角:奥迪 BMW */ public class BMW implements Car { @Override public void drive() { System.out.println("驾驶员在驾车BMW"); } } ... /** * 具体内容商品配角:宾利 Rolls Royce */ public class RollsRoyce implements Car { @Override public void drive() { System.out.println("驾驶员在驾车Rolls Royce"); } }

现在,他们先来表述两个电动汽车厂房的USB

/** * 抽象化厂房配角:电动汽车厂房 */ public interface CarFactory { Car getCar(); }

然后,针对四种不同的商品Benz、BMW、RollsRoyce,分别提供各自具体内容的厂房类

/** * 具体内容厂房配角:Benz 厂房 */ public class BenzFactory implements CarFactory{ @Override public Benz getCar() { return new Benz(); } } ... /** * 具体内容厂房配角:BMW 厂房 */ public class BMWFactory implements CarFactory{ @Override public BMW getCar() { return new BMW(); } } ... /** * 具体内容厂房配角:Rolls Royce 厂房 */ public class RollsRoyceFactory implements CarFactory{ @Override public RollsRoyce getCar() { return new RollsRoyce(); } }

现在让他们来实际试验下

public class FactoryMethodDemo { public static void main(String[] args) { CarFactory factory = new BenzFactory(); Car benz = factory.getCar(); benz.drive(); factory = new BMWFactory(); Car bmw = factory.getCar(); bmw.drive(); factory = new RollsRoyceFactory(); Car rollsRoyce = factory.getCar(); rollsRoyce.drive(); } }

能看到试验结论,符合预期

参考文献Head First 设计商业模式 弗里曼著
欢迎莅临安欣沙拉酱工厂参观指导,低卡酱汁咨询热线:176 2109 5558。轻食沙拉酱汁OEM贴牌代工工厂。

全国服务热线

176-2109-5558