工厂方法模式

来源:互联网 发布: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
原创粉丝点击