当前位置:首页 > java常用设计模式工厂模式的实现
voidgrow(); voidharvest(); voidplant(); }
Apple.java:
publicclassAppleimplementsFruit { }
Grape.java:
publicclassGrapeimplementsFruit { }
Strawberry.java:
publicclassStrawberryimplementsFruit
privatebooleanseedless;
publicvoidgrow(){//葡萄的生长函数代码} publicvoidharvest(){//葡萄的收获函数代码} publicvoidplant(){//葡萄的种植函数代码} publicbooleangetSeedless(){returnseedless;}
publicvoidsetSeedless(booleanseedless){this.seedless=seedless;} privateinttreeAge;
publicvoidgrow(){//苹果的生长函数代码} publicvoidharvest(){//苹果的收获函数代码} publicvoidplant(){//苹果的种植函数代码} publicintgetTreeAge(){returntreeAge;}
publicvoidsetTreeAge(inttreeAge){this.treeAge=treeAge;}
{ }
*下面的源码就是工厂方法模式的重点了,在简单工厂模式中,将这里将FruitGardener定 义为一个类,即园丁要管理园里的所有水果,如果园丁哪天病了,水果都不能管理了 在工厂方法模式中将FruitGardener定义为一个接口,而将管理水果的角色划分得更细, 比如有
葡萄园丁草莓园丁苹果园丁等等具体角色实现FruitGardener接口的工厂 方法源码如下所示:
接口FruitGardener的源码: publicinterfaceFruitGardener {
Fruitfactory(); }
苹果园丁类AppleGardener.java的源码:
publicclassAppleGardenerimplementsFruitGardener { }
葡萄园丁类GrapeGardener.java的源码:
publicclassGrapeGardenerimplementsFruitGardener
publicFruitfactory(){returnnewApple();} privatebooleancoteless;
publicvoidgrow(){//草莓的生长函数代码} publicvoidharvest(){//草莓的收获函数代码} publicvoidplant(){//草莓的种植函数代码} publicbooleangetCoteless(){returncoteless;}
publicvoidsetCoteless(booleancoteless){this.coteless=coteless;}
{ }
草莓园丁类StrawberryGardener.java的源码:
publicclassStrawberryGardenerimplementsFruitGardener { }
由以上源码可以看出,使用工厂方法模式保持了简单工厂模式的优点,克服了其缺点 当在系统中引入新产品时,既不必修改客户端,又不必修改具体工厂角色可以较好 的对系统进行扩展
/*------------------------------------3------------------------------------*/
现在工厂再次大发展,要引进塑料大棚技术,在大棚里种植热带(Tropical)和亚热带的 水果和蔬菜(Veggie)其中水果分为TropicalFruit和NorthernFruit,蔬菜分为TropicalVeggie
和NorthernVeggie园丁包括TropicalGardener和NorthernGardener也就是说, TropicalGardener专门管理TropicalFruit和TropicalGardener,NorthernGardener专门
/****************管理NorthernFruit和NorthernVeggie抽象工厂模式在这个例子中的源码如下所示*****************/ Fruit.java:
publicinterfaceFruit{} NorthernFruit.java:
publicclassNorthernFruitimplementsFruit {
、
抽
象
工
厂
模
式
:
publicFruitfactory(){returnnewStrawberry();} publicFruitfactory(){returnnewGrape();}
}
privateStringname;
publicNorthernFruit(Stringname){} publicStringgetName(){returnname;}
publicvoidsetName(Stringname){this.name=name;}
TropicalFruit.java:
publicclassTropicalFruitimplementsFruit { }
Veggie.java:
publicinterfaceVeggie{} TropicalVeggie.java:
publicclassTropicalVeggieimplementsVeggie { }
NorthernVeggie.java:
publicclassNorthernVeggieimplementsVeggie {
privateStringname;
publicTropicalVeggie(Stringname){} publicStringgetName(){returnname;}
publicvoidsetName(Stringname){this.name=name;} privateStringname;
publicTropicalFruit(Stringname){} publicStringgetName(){returnname;}
publicvoidsetName(Stringname){this.name=name;}
共分享92篇相关文档