龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

学习设计模式之详解工厂模式(2)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
5. 工厂模式实例 让我们来“改造”那个简单工厂的例子: class Program { static void Main( string [] args) { Factory factory = new FactoryA (); Product product = factory.CreatePrud

5. 工厂模式实例

让我们来“改造”那个简单工厂的例子:

class Program
{
    static void Main(string[] args)
    {
        Factory factory = new FactoryA();
        Product product = factory.CreatePruduct();
    }
}

enum Type
{ 
    ProductA,
    ProductB
}

abstract class Factory
{
    public abstract Product CreatePruduct();
}
class FactoryA : Factory
{
    public override Product CreatePruduct()
    {
        return new ProductA();
    }
}
class FactoryB : Factory
{
    public override Product CreatePruduct()
    {
        return new ProductB();
    }
}
abstract class Product
{ 

}

class ProductA : Product
{ 
    
}

class ProductB:Product
{ 

}

让我们来总结下工厂模式的特点:

工厂模式把简单工厂从核心地位给拉了出来,把创建的权利又交还到客户手中,从而让整个项目的核心转移。

6. 无模式的实现

class Program
{
    static void Main(string[] args)
    {
        Product product = new ProductA();
    }
}
abstract class Product
{

}

class ProductA : Product
{

}

class ProductB : Product
{

}

7. 工厂方法大比拼

本节是全文的核心,我想也是最容易引起争论的地方,在这里,我只表明我自己的观点,也欢迎大家多提意见!

如果单单从上文的例子来看,使用工厂方法未免有了为了模式而模式之嫌。

假设我们的需求改为了制造一个ProductB的对象。让我们来看看3种模式的大比拼:

<1> 简单工厂模式需要在客户端发生变动:

static void Main(string[] args)
{
    Factory factory = new Factory();
    //factory.CreatePruduct(Type.ProductA);
    factory.CreatePruduct(Type.ProductB);
}

<2> 工厂模式需要在客户端发生变动:

static void Main(string[] args)
{
    //Factory f = new FactoryA();
    Factory f = new FactoryB();
    f.CreatePruduct();
}

<3> 若不用设计模式:

static void Main(string[] args)
{
    //Product product = new ProductA();
    Product product = new ProductB();
}

三种方式没有什么区别。也就是说,如果在客户端只有一个调用,而且只需要简单的一步初始化,我们完全没有必要为了模式而模式。


收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接