




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.2
工厂方法(FactoryMethod)模式
工厂方法模式是类的创建模式,又叫虚拟构造子(VirtualConstructor)模式或者多态性工厂(PolymorphicFactory)模式。
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中。
1.2.1
工厂方法模式的引进
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。下面是工厂方法模式的缩略类图:
在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出具工厂子类必须实现的接口,而不接触哪一产品创建的细节。
这种抽象的结果,使这种工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。
1.2.2
工厂方法模式的结构
在工厂方法模式中,一般都有一个平行的等级结构,也就是说工厂和产品是对应的的。抽象工厂对应抽象产品,具体工厂对应具体产品。简单的示意图如下:
从上图可以看出,工厂方法模式的系统涉及到了以下角色:
抽象工厂角色:与应用程序无关,任何在模式中创建对象的工厂必须实现这个接口。
具体工厂角色:实现了抽象工厂接口的具体Java类,含有与引用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。
抽象产品角色:工厂方法所创建产品对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品角色:这个角色实现了抽象产品角色所声名的接口。工厂方法所创建的每个具体产品对象都是某个具体产品角色的实例。
1.2.3
工厂方法模式在农场系统中的实现
1.2.3.1
背景
在简单工厂模式中,有个全能的园丁,控制所有作物的种植、生长和收获。现在农场规模变大了,管理更加专业化了。过去全能的园丁没有了,每一种作物都有专门的园丁管理,形成了规模化和专业化生产。
1.2.3.2
系统设计机构图
1.2.3.3
实现源码
1.2.3.3.1
水果产品接口Fruit.java
packagecom.lavasoft.patterns.factorymethod.ybms;/**
*工厂模式--工厂方法模式--一般性模式(农场应用)
*ReadMe:
水果接口
*/
publicinterfaceFruit{
/**
*种植
*/
voidplant();
/**
*生长
*/
voidgrow();
/**
*收获
*/
voidharvest();
}
publicFruitfactory();
}
1.2.3.3.6
苹果工厂:AppleGardener.java
packagecom.lavasoft.patterns.factorymethod.ybms;/**
*工厂模式--工厂方法模式--一般性模式(农场应用)
*ReadMe:
苹果工厂方法
*/
publicclassAppleGardenerimplementsFruitGardener{
/**
*工厂方法
*
*@return苹果
*/
publicFruitfactory(){
Fruitf=newApple();
System.out.println("水果工厂(AppletGardener)成功创建一个水果:苹果!");
returnf;
}
}
1.2.3.3.7
葡萄工厂:GrapeGardener.java
packagecom.lavasoft.patterns.factorymethod.ybms;/**
*工厂模式--工厂方法模式--一般性模式(农场应用)
*ReadMe:
添加说明
*/
publicclassGrapeGardenerimplementsFruitGardener{
/**
*工厂方法
*@return葡萄
*/
publicFruitfactory(){
Fruitf=newGrape();
System.out.println("水果工厂(GrapeGardener)成功创建一个水果:葡萄!");
returnf;
}
}
1.2.3.3.8
草莓工厂:StrawberryGardener.java
packagecom.lavasoft.patterns.factorymethod.ybms;/**
*工厂模式--工厂方法模式--一般性模式(农场应用)
*ReadMe:
添加说明
*/
publicclassStrawberryGardenerimplementsFruitGardener{
/**
*工厂方法
*@return草莓
*/
publicFruitfactory(){
Fruitf=newStrawberry();
System.out.println("水果工厂(StrawberryGardener)成功创建一个水果:草莓!");
returnf;
}
}
1.2.3.3.9
测试类(客户端):TestApp.java
packagecom.lavasoft.patterns.factorymethod.ybms;/**
*工厂模式--工厂方法模式--一般性模式(农场应用)
*ReadMe:
测试类(客户端)
*/
publicclassTestApp{
privateFruitGardenerf1,f2,f3;
privateFruitp1,p2,p3;
privatevoidtest(){
//实力化水果工厂
f1=newAppleGardener();
f2=newGrapeGardener();
f3=newStrawberryGardener();
//从水果工厂生产水果
p1=f1.factory();
p2=f2.factory();
p3=f3.factory();
}
publicstaticvoidmain(Stringargs[]){
TestApptest=newTestApp();
test.test();
}
}
1.2.3.3.10
测试运行结果
水果工厂(AppletGardener)成功创建一个水果:苹果!
水果工厂(GrapeGardener)成功创建一个水果:葡萄!
水果工厂(StrawberryGardener)成功创建一个水果:草莓!
Processfinishedwithexitcode0
1.2.3.4
关于工厂方法模式的实现
在下面我简单说说一些实现方式,不做详细分析了。
1.使用java接口或者java抽象类
2.使用多个工厂方法
3.产品循环使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学校园消防安全教育
- 口腔早期矫正课件
- 毕业设计中期检查
- 2025届河北省正定中学高三下学期第二次模拟考试历史试题(含答案)
- 2025合作协议保险合同样本
- 交通安全主题教育
- 2024-2025统编版道德与法治二年级下册第一单元练习卷及答案
- 2024-2025苏教版科学一年级下册第四单元测试卷及答案
- 2025小学道德与法治教师课标练习卷简答题100题及答案
- 2025高中地理教师课标考试模拟试卷附参考答案
- 小学科学课堂教学设计策略课件
- 中药饮片出库单
- 国开2023春《语言学概论》形考任务1-3+大作业参考答案
- 宿舍楼施工方案方案
- 甲醇-水精馏塔
- 中国话剧史专题知识
- GB/T 15544.1-2023三相交流系统短路电流计算第1部分:电流计算
- GB/T 90.3-2010紧固件质量保证体系
- GB/T 18799-2020家用和类似用途电熨斗性能测试方法
- 科技公司涉密计算机软件安装审批表
- GA/T 1369-2016人员密集场所消防安全评估导则
评论
0/150
提交评论