Simple Factory模式
一、简单工厂
简单工厂模式中工厂为具体工厂,产品为抽象产品,由工厂实例创建产品实例。
示例图:
1、 在这里,我们先定义水果(IFruit)接口:
public interface IFruit {
void Plant(); //水果是被种植的
void EnableEat(); //水果能吃
}
2、 苹果(Apple)是对水果(IFruit)接口的实现:
public class Apple : IFruit{
public void plant(){
Console.WriteLine("种苹果!");
}
public void enableEat(){
Console.WriteLine("苹果好吃!");
}
}
3、 鸭梨(Pear)是对水果(IFruit)接口的实现:
public class Pear : Fruit{
public void plant(){
Console.WriteLine("种鸭梨!");
}
public void enableEat(){
Console.WriteLine("鸭梨好吃!");
}
}
4、定义买水果工厂(SimpleFactory):
public class SimpleFactory {
/**
* 简单工厂方法
*/
public IFruit buyFruit(String name){
if (name. Equals ("apple")) { //如果是苹果,则返回苹果实例
return new Apple();
}
else if (name. Equals ("pear")){ //如果是鸭梨,则返回鸭梨实例
return new pear();
}
else{
return null;
}
}
}
5、 编写测试类:
public class FruitTest {
public static void main(String[] args){
SimpleFacotry sf = new SimpleFacotry (); //去工厂买水果
sf.buyFruit("apple").enableEat(); //调用苹果的enableEat()方法
}
}
6、 说明:
A:我要购买苹果,只需向工厂角色(BuyFruit)请求即可。而工厂角色在接到请求后,会自行判断创建和提供哪一个产品。
B:但是对于工厂角色(BuyFruit)来说,增加新的产品(比如说增加草莓)就是一个痛苦的过程。工厂角色必须知道每一种产品,如何创建它们,以及何时向客户端提供它们。换言之,接纳新的产品意味着修改这个工厂。
C:因此Simple Factory模式的开放性比较差。
有什么办法可以解决这个问题吗?
1) 那就需要Factory Method模式来为我们服务了。
2) 反射得到对应的对象
反射改写4、定义买水果工厂(SimpleFactory):
public class SimpleFactory
{
public Fruit BuyFruit(string name)
{
return (Fruit) Assembly.Load("Factory").CreateInstance("Factory."+name) ;
// Assembly.Load("项目名称").CreateInstance("包名.类名");
}
}
发表于 @ 2008年07月22日 07:46:00 | 评论( loading... ) | 举报| 收藏