工厂方法模式
来源:互联网 发布:java人工智能 编辑:程序博客网 时间:2024/06/05 17:15
在简单工厂模式中,也就是上一篇博文中写了一个全知全能的园丁角色(FruitGardener),控制所有的作物的种植,生长和收获,
但是,如果这个农场变得更大了,那么管理也要更加专业化,过去的全能人物也就没有了,每一种农作物都有专门的园丁管理,
形成规模化和专业化生产。
因此,在农场系统中就要重新设计,要有每一种作物对应的园丁,因此设计图如下:
抽象工厂类FruitGardener是工厂方法模式的核心,但它并不掌握水果类或蔬菜类的生杀大权,相反这项权力被交给子类,即
AppleGardener,StrawberryGardener,GrapeGardener来完成。
产品角色的等级结构为:
源码为:
Fruit:
package FactoryMethodModel;public interface Fruit {void grow();void harvest();void plant();}Apple:
package FactoryMethodModel;public class Apple implements Fruit {private int treeAge;@Overridepublic void grow() {System.err.println("Apple is growing.....");}@Overridepublic void harvest() {System.err.println("Apple has been harvested.");}@Overridepublic void plant() {System.err.println("Apple has been planted.");}public int getTreeAge() {return treeAge;}public void setTreeAge(int treeAge) {this.treeAge = treeAge;}}Strawberry:
package FactoryMethodModel;public class Strawberry implements Fruit {@Overridepublic void grow() {System.err.println("Strawberry is growing.....");}@Overridepublic void harvest() {System.err.println("Strawberry has been harvested.");}@Overridepublic void plant() {System.err.println("Strawberry has been planted.");}}Grape:
package FactoryMethodModel;public class Grape implements Fruit {private boolean seedless;@Overridepublic void grow() {System.err.println("Grape is growing....");}@Overridepublic void harvest() {System.err.println("Grape has been harvested.");}@Overridepublic void plant() {System.err.println("Grape has been planted.");}public boolean isSeedless() {return seedless;}public void setSeedless(boolean seedless) {this.seedless = seedless;}}
工厂角色的等级结构为:
FruitGardener:
package FactoryMethodModel;public interface FruitGardener {/** * 工厂方法 */public Fruit factory();}AppleGardener:
package FactoryMethodModel;public class AppleGardener implements FruitGardener {@Overridepublic Fruit factory() {return new Apple();}}StrawberryGardener:
package FactoryMethodModel;public class StrawberryGardener implements FruitGardener {@Overridepublic Fruit factory() {return new Strawberry();}}GrapeGardener:
package FactoryMethodModel;public class GrapeGardener implements FruitGardener {@Overridepublic Fruit factory() {return new Grape();}}如此,便是实现了工厂方法模式。
1 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- HDOJ 1032 The 3n + 1 problem(水)
- PR4E第五周作业
- 经典贪吃蛇小游戏
- MFC在对话框中添加了一个richedit控件,窗口就不显示了。
- 应用DOM方式解析XML
- 工厂方法模式
- Java_IO流
- 单元测试——Moq框架下的Mock简介及简单实例
- MySQL数据库初学
- 在Uubuntu 14.04 64bit上搭建NumPy函数库环境
- 如何设计数据库?
- hdu 5179 beautiful number (数位dp)
- Codeforces Round #294 (Div. 2)
- 长成你自己的样子