您的位置 首页 > 德语词汇

factory test是什么意思、读音?创建型-工厂模式(Factory Pattern)

其实factory test是什么意思、读音的问题并不复杂,但是又很多的朋友都不太了解创建型-工厂模式(Factory Pattern),因此呢,今天小编就来为大家分享factory test是什么意思、读音的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

1、本篇我们来学习工厂模式,有的小伙伴可能会说起航篇里的大纲中没有这个模式呀,这是从哪冒出来的。事实确实如此,工厂模式包含了简单工厂模式、工厂方法模式和抽象工厂模式。

factory test是什么意思、读音?创建型-工厂模式(Factory Pattern)

2、简单工厂模式也没有在大纲中出现,这个是较早出现的工厂模式。

3、大白话来说就是,当我们需要一个对象时,不需要知道具体的创建过程,只需要问工厂要即可。由此可见,工厂的作用就是为我们创建对象。

4、举个栗子,比如你要去买书,可能想买《Java编程思想》,也可能是《EffectiveJava》又或者是《深入理解Java虚拟机》,这种情况下直接去书店就能满足你的需求。这里的书店就充当工厂的作用。

5、简单工厂模式也叫静态工厂方法,根据传入的参数不同返回相应的对象。实现该方法所在的类就是简单工厂类。如下图所示:

6、这里以支付为例,日常生活中大家在付款时,用的比较多的就是支付宝和微信了。根据这个场景我们来实现简单工厂的代码。

7、/**\n*第一步:创建抽象产品接口,定义抽象方法,让具体的产品类去实现具体业务\n*/\npublicinterfaceIPay{\n\n/**\n*定义统一支付方法\n*/\nvoidunifiedorder();\n}12345678910复制代码类型:[java]

第二步:创建具体的业务实现

8、/**\n*第二步:创建具体产品类,实现抽象产品接口,并实现具体的业务方法\n*/\npublicclassAliPayimplementsIPay{\n\n@Override\npublicvoidunifiedorder(){\nSystem.out.println("调用阿里支付");\n}\n}\n\n/**\n*第二步:创建具体产品类,实现抽象产品接口,并实现具体的业务方法\n*/\npublicclassWechatPayimplementsIPay{\n\n@Override\npublicvoidunifiedorder(){\nSystem.out.println("调用微信支付");\n}\n}123456789101112131415161718192021复制代码类型:[java]

第三步:创建简单工厂

9、/**\n*第三步:创建简单工厂类,负责创建用户所需的对象\n*/\npublicclassSimplePayFactory{\n\n/**\n*获取支付对象方法\n*@parambeanName\n*@return\n*/\npublicstaticIPaygetPayInstance(StringbeanName){\nif(beanName.equalsIgnoreCase("AliPay")){\nreturnnewAliPay();\n}elseif(beanName.equalsIgnoreCase("WechatPay")){\nreturnnewWechatPay();\n}else{\nreturnnull;\n}\n}\n}1234567891011121314151617181920复制代码类型:[java]

第四步:测试

10、publicclassSimpleFactoryTest{\n\npublicstaticvoidmain(String[]args){\nIPayaliPay=SimplePayFactory.getPayInstance("AliPay");\naliPay.unifiedorder();\nIPaywechatPay=SimplePayFactory.getPayInstance("WechatPay");\nwechatPay.unifiedorder();\n}\n}123456789复制代码类型:[java]

运行结果:

11、调用阿里支付\n调用微信支付12复制代码类型:[java]

优点:解耦

12、违背开闭原则,新增Product类需要修改getPayInstance代码

13、工厂方法模式又称工厂模式,是简单工厂的一个变种,解决了开闭原则问题。用户只需要知道具体工厂的名称就可以拿到相应的对象。如下图所示:

14、还是以支付为例,在工厂方法中,原有内容保持不变,但多了一层获取具体工厂的接口。

15、**\n*第一步:创建抽象产品接口,定义抽象方法,让具体的产品类去实现具体业务\n*/\npublicinterfaceIPay{\n\n/**\n*定义统一支付方法\n*/\nvoidunifiedorder();\n}12345678910复制代码类型:[java]

第二步:创建具体的业务实现

16、/**\n*第二步:创建具体产品类,实现抽象产品接口,并实现具体的业务方法\n*/\npublicclassAliPayimplementsIPay{\n\n@Override\npublicvoidunifiedorder(){\nSystem.out.println("调用阿里支付");\n}\n}\n\n/**\n*第二步:创建具体产品类,实现抽象产品接口,并实现具体的业务方法\n*/\npublicclassWechatPayimplementsIPay{\n\n@Override\npublicvoidunifiedorder(){\nSystem.out.println("调用微信支付");\n}\n}123456789101112131415161718192021复制代码类型:[java]

第三步:创建获取支付对象的工厂

17、/**\n*第三步:抽象工厂类,用于描述具体工厂的公共接口\n*/\npublicinterfaceIPayFactory{\n\n/**\n*具体工厂的抽象方法\n*@returnIPay\n*/\nIPaygetPay();\n}1234567891011复制代码类型:[java]

第四步:创建具体工厂类

18、/**\n*第四步:具体工厂类,实现抽象工厂接口,完成对象创建\n*/\npublicclassAlipayFactoryimplementsIPayFactory{\n\n@Override\npublicIPaygetPay(){\nreturnnewAliPay();\n}\n}\n\n/**\n*第四步:具体工厂类,实现抽象工厂接口,完成对象创建\n*/\npublicclassWechatFactoryimplementsIPayFactory{\n\n@Override\npublicIPaygetPay(){\nreturnnewWechatPay();\n}\n}123456789101112131415161718192021复制代码类型:[java]

第五步:测试

19、publicclassMethodFactoryTest{\n\npublicstaticvoidmain(String[]args){\nIPayFactoryalipayFactory=newAlipayFactory();\nIPayaliPay=alipayFactory.getPay();\naliPay.unifiedorder();\nIPayFactorywechatFactory=newWechatFactory();\nIPaywechatPay=wechatFactory.getPay();\nwechatPay.unifiedorder();\n}\n}\n123456789101112复制代码类型:[java]

运行结果:

20、调用阿里支付\n调用微信支付12复制代码类型:[java]

优点:

21、类数量过多,工厂越多复杂性越高

22、通过工厂方法的学习,大家也可以感觉到该模式只考虑同类型的产品,但是生活中同样有很多综合型的工厂,如大学有很多的专业,企业里有很多的岗位等等,这就造就了抽象工厂模式。

23、为了更好的理解抽象工厂,我们先来了解下产品的相关概念,如下图所示:

24、简单工厂模式不建议在产品种类多的情况下使用

25、接下来就以苹果和华为公司生产电脑和手机为例,实现抽象工厂。如下图所示:

26、/**\n*第一步:创建电脑工厂,并定义功能\n*/\npublicinterfaceIComputerFactory{\n\n/**\n*开机\n*/\nvoidstart();\n\n/**\n*关机\n*/\nvoidstop();\n}\n\n/**\n*第一步:创建手机工厂,并定义功能\n*/\npublicinterfaceIPhoneFactory{\n\n/**\n*开机\n*/\nvoidstart();\n\n/**\n*关机\n*/\nvoidstop();\n}12345678910111213141516171819202122232425262728293031复制代码类型:[java]

第二步:创建具体产品

27、/**\n*第二步:创建具体产品(苹果电脑)\n*/\npublicclassMacimplementsIComputerFactory{\n@Override\npublicvoidstart(){\nSystem.out.println("苹果电脑开机");\n}\n\n@Override\npublicvoidstop(){\nSystem.out.println("苹果电脑关机");\n}\n}\n\n/**\n*第二步:创建具体产品(苹果手机)\n*/\npublicclassIPhoneimplementsIPhoneFactory{\n\n@Override\npublicvoidstart(){\nSystem.out.println("苹果手机开机");\n}\n\n@Override\npublicvoidstop(){\nSystem.out.println("苹果手机关机");\n}\n}123456789101112131415161718192021222324252627282930复制代码类型:[java]

创建华为产品:

28、/**\n*第二步:创建具体产品(华为电脑)\n*/\npublicclassHuaWeiComputerimplementsIComputerFactory{\n@Override\npublicvoidstart(){\nSystem.out.println("华为电脑开机");\n}\n\n@Override\npublicvoidstop(){\nSystem.out.println("华为电脑关机");\n}\n}\n\n/**\n*第二步:创建具体产品(华为手机)\n*/\npublicclassHuaWeiPhoneimplementsIPhoneFactory{\n\n@Override\npublicvoidstart(){\nSystem.out.println("华为手机开机");\n}\n\n@Override\npublicvoidstop(){\nSystem.out.println("华为手机关机");\n}\n}123456789101112131415161718192021222324252627282930复制代码类型:[java]

第三步:创建企业工厂

29、/**\n*第三步:创建企业工厂(苹果工厂)\n*/\npublicclassAppleFactoryimplementsIProductFactory{\n\n@Override\npublicIPhoneFactoryphoneProduct(){\nreturnnewIPhone();\n}\n\n@Override\npublicIComputerFactorycomputerProduct(){\nreturnnewMac();\n}\n}\n\n/**\n*第三步:创建企业工厂(华为工厂)\n*/\npublicclassHuaWeiFactoryimplementsIProductFactory{\n\n@Override\npublicIPhoneFactoryphoneProduct(){\nreturnnewHuaWeiPhone();\n}\n\n@Override\npublicIComputerFactorycomputerProduct(){\nreturnnewHuaWeiComputer();\n}\n}12345678910111213141516171819202122232425262728293031复制代码类型:[java]

第四步:创建最上层抽象工厂

30、/**\n*第四步:创建最上层抽象工厂\n*/\npublicinterfaceIProductFactory{\n\n/**\n*生产手机\n*@returnIPhoneFactory\n*/\nIPhoneFactoryphoneProduct();\n\n/**\n*生产电脑\n*@returnIComputerFactory\n*/\nIComputerFactorycomputerProduct();\n}1234567891011121314151617复制代码类型:[java]

第五步:抽象工厂测试

31、publicclassAbstractFactoryTest{\n\npublicstaticvoidmain(String[]args){\n//苹果产品系列\nIProductFactoryappleFactory=newAppleFactory();\nIComputerFactoryappleComputerFactory=appleFactory.computerProduct();\nappleComputerFactory.start();\nappleComputerFactory.stop();\nIPhoneFactoryapplePhoneFactory=appleFactory.phoneProduct();\napplePhoneFactory.start();\napplePhoneFactory.stop();\nSystem.out.println("======================");\n//华为产品系列\nIProductFactoryhuaWeiFactory=newHuaWeiFactory();\nIComputerFactoryhuaWeiComputerFactory=huaWeiFactory.computerProduct();\nhuaWeiComputerFactory.start();\nhuaWeiComputerFactory.stop();\nIPhoneFactoryhuaWeiPhoneFactory=huaWeiFactory.phoneProduct();\nhuaWeiPhoneFactory.start();\nhuaWeiPhoneFactory.stop();\n}\n}12345678910111213141516171819202122复制代码类型:[java]

运行结果:

32、苹果电脑开机\n苹果电脑关机\n苹果手机开机\n苹果手机关机\n====分割线====\n华为电脑开机\n华为电脑关机\n华为手机开机\n华为手机关机123456789复制代码类型:[java]

优点:工厂方法的扩展,实现了产品族生产。

33、通过本篇文章的学习,总结以下几点:

34、简单工厂模式不建议在产品种类多的情况下使用

35、工厂方法模式适用于多种厂家生产类似产品,项目中使用频率较低

36、抽象工厂是工厂方法的扩展,实现了产品族生产

37、抽象工厂在实际开发中的出现的频率更低

38、抽象工厂中每个工厂只生产一个产品时建议使用工厂方法

39、是工厂方法的扩展,实现了产品族生产

40、抽象工厂在实际开发中的出现的频率更低

41、抽象工厂中每个工厂只生产一个产品时建议使用工厂方法

关于factory test是什么意思、读音到此分享完毕,希望能帮助到您。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023