抽象工厂
本章任务
1抽象工厂的定义
抽象工厂::提供创建对象的接口.
2.实现水果族的扩展且符合开闭原则。
package com.aptech.found.factory; /** * * 文件名: Gardener.java * 版权: 方勇 * 描述:园丁 * Email:[email protected] * 修改时间: 2010-7-10下午05:06:45 */ public interface IGardener { public IFruit createFruit(String name); public IVeggie createVeggie(String name); }
package com.aptech.found.factory; /** * * 文件名: IFruit.java * 版权: 方勇 * 描述:水果 * Email:[email protected] * 修改时间: 2010-7-10下午05:05:45 */ public interface IFruit { }
package com.aptech.found.factory; /** * * 文件名: IVeggie.java * 版权: 方勇 * 描述:蔬菜 * Email:[email protected] * 修改时间: 2010-7-10下午05:05:59 */ public interface IVeggie { }
package com.aptech.found.factory; /** * * 文件名: NorthernGardener.java * 版权: 方勇 * 描述:北方的园丁 * Email:[email protected] * 修改时间: 2010-7-10下午05:08:21 */ public class NorthernGardener implements IGardener { public IFruit createFruit(String name) { return new NorthernFruit(name); } public IVeggie createVeggie(String name) { return new NorthernVeggie(name); } /** @link dependency * @label Creates*/ /*# NorthernVeggie lnkNorthernVeggie; */ /** @link dependency * @label Creates*/ /*# NorthernFruit lnkNorthernFruit; */ }
package com.aptech.found.factory; /** * * 文件名: NorthernFruit.java * 版权: 方勇 * 描述:北方水果 * Email:[email protected] * 修改时间: 2010-7-10下午05:07:50 */ public class NorthernFruit implements IFruit { private String name; public NorthernFruit(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.aptech.found.factory; /** * * 文件名: NorthernVeggie.java * 版权: 方勇 * 描述:北方的蔬菜 * Email:[email protected] * 修改时间: 2010-7-10下午05:08:47 */ public class NorthernVeggie implements IVeggie { private String name; public NorthernVeggie(String name) { } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.aptech.found.factory; /** * * 文件名: TropicalGardener.java * 版权: 方勇 * 描述:热带的园丁 * Email:[email protected] * 修改时间: 2010-7-10下午05:10:02 */ public class TropicalGardener implements IGardener { public IFruit createFruit(String name) { return new TropicalFruit(name); } public IVeggie createVeggie(String name) { return new TropicalVeggie(name); } /** @link dependency * @label Creates*/ /*# TropicalVeggie lnkTropicalVeggie; */ /** @link dependency * @label Creates*/ /*# TropicalFruit lnkTropicalFruit; */ }
package com.aptech.found.factory; /** * * 文件名: TropicalFruit.java * 版权: 方勇 * 描述:热带的水果 * Email:[email protected] * 修改时间: 2010-7-10下午05:09:31 */ public class TropicalFruit implements IFruit { private String name; public TropicalFruit(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.aptech.found.factory; /** * * 文件名: TropicalVeggie.java * 版权: 方勇 * 描述:热带的蔬菜 * Email:[email protected] * 修改时间: 2010-7-10下午05:10:23 */ public class TropicalVeggie implements IVeggie { private String name; public TropicalVeggie(String name) { } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.aptech.found.factory; import junit.framework.TestCase; public class AbstractFactoryTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); } public void testAbstractFactory() { // 实例化北方园丁 IGardener northernGardener = new NorthernGardener(); // 园丁种植了北方水果(苹果) NorthernFruit northernFruit = (NorthernFruit) northernGardener.createFruit("苹果"); // 测试是否为北方苹果 assertEquals("苹果", northernFruit.getName()); /** * 话剧场景 * 一年之后公司规模扩大了 * 公司来了位热带园丁 */ // 实例化热带园丁 IGardener tropicalGardener = new TropicalGardener(); // 园丁种植了热带水果(榴莲) TropicalFruit tropicalFruit = (TropicalFruit) tropicalGardener.createFruit("榴莲"); // 测试是否为北方苹果 assertEquals("榴莲", tropicalFruit.getName()); } }
本章目标
1. 理解抽象工厂