工厂模式
SUN_DEMON (sudemon@163.com), 软件工程师, www.egemmer.cn, www.gemsuit.cn
2007 年 11 月 14 日
工厂模式是非常基本的设计模式. 在真实的系统中, 产品可以形成复杂的等级结构, 多个不同名称产品可以是
共同类型的, 本文使用简单的编程实例来说明工厂模式做为生产者, 生产相同类型不同名称的产品.
本文的实例使用 Java 语言编写.
工厂模式的几种形态
- 简单工厂(Simple Factory)模式
- 工厂方法(Factory Method)模式
- 抽象工厂(Abstract Factory)模式
简单工厂模式
比如说有一个公司, 专门向市场生产服装. 服装公司有两种服装:
- 衣服
- 裤子
服装与其他的商品有很大的不同, 服装是可以穿戴的. 那么可以建立一个各种服装都适用的接口, 以便与其他商品
区分开.
清单1 表示服装的接口.
public
interface
Costume
...
{
public void devise(); // 设计
public void produce(); // 生产
public void pack(); // 包装
}
public void devise(); // 设计
public void produce(); // 生产
public void pack(); // 包装
}
衣服是服装的一种, 所以他实现了服装的所有方法.
清单2 表示衣服的类
public
class
Garment
implements
Costume
...
{
public void design() ...{
System.out.println("设计衣服");
}
public void produce() ...{
System.out.println("生产衣服");
}
public void pack() ...{
System.out.println("包装衣服");
}
}
public void design() ...{
System.out.println("设计衣服");
}
public void produce() ...{
System.out.println("生产衣服");
}
public void pack() ...{
System.out.println("包装衣服");
}
}
裤子也是服装的一种, 所以也实现了服装的所有方法.
清单2 表示裤子的类
public
class
Breeches
implements
Costume
...
{
public void design() ...{
System.out.println("设计裤子");
}
public void produce() ...{
System.out.println("生产裤子");
}
public void pack() ...{
System.out.println("包装裤子");
}
}
public void design() ...{
System.out.println("设计裤子");
}
public void produce() ...{
System.out.println("生产裤子");
}
public void pack() ...{
System.out.println("包装裤子");
}
}
公司的工作人员也是系统的一部分. 工作人员可以根据客户的需求, 创建不同的服装对象.
清单3 表示工作人员的类
public
class
Employee
...
{
public static Costume get(String costumeName)
throws Exception...{
if( costumeName.equalsIgnoreCase("garment") )
return new Garment();
if( costumeName.equalsIgnoreCase("breeches") )
return new Breeches();
throw new Exception("产品名称错误, 必须是: garment, breeches");
}
}
public static Costume get(String costumeName)
throws Exception...{
if( costumeName.equalsIgnoreCase("garment") )
return new Garment();
if( costumeName.equalsIgnoreCase("breeches") )
return new Breeches();
throw new Exception("产品名称错误, 必须是: garment, breeches");
}
}
方法工厂模式
未完, 正在写做.