抽象工厂
本章任务
1抽象工厂的定义
抽象工厂::提供创建对象的接口.
2.实现水果族的扩展且符合开闭原则。
package com.aptech.found.factory;
/**
*
* 文件名: Gardener.java
* 版权: 方勇
* 描述:园丁
* Email:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 2010-7-10下午05:05:45
*/
public interface IFruit
{
}
package com.aptech.found.factory;
/**
*
* 文件名: IVeggie.java
* 版权: 方勇
* 描述:蔬菜
* Email:fangyong2006@163.com
* 修改时间: 2010-7-10下午05:05:59
*/
public interface IVeggie
{
}
package com.aptech.found.factory;
/**
*
* 文件名: NorthernGardener.java
* 版权: 方勇
* 描述:北方的园丁
* Email:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 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:fangyong2006@163.com
* 修改时间: 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. 理解抽象工厂