Factory Method和Abstract Factory 的区别

为了区分Factory Method和Abstract Factory的区别,查阅了些资料,总算有点感悟,下面是本人的感悟的总结。

在设计模式中,Factory Method和Abstract Factory的区别并不容易理解,主要是Abstrct Factory一般情况下是要通过Factory Method来实现,或者说Abstract Factory包含Factroy Method。

从字面上来理解,Factory Method强调的是Method,Abstract Factory强调的是抽象类,也就是继承关系。

下面,将使用例子来对比Factory Method和Abstract Factory。

有两种不同的产品,分别是电视和收音机,下面分别用Factory Method和Abstract Factory模式对两种产品进行创建。

(1)  Factory Method模式主要通过工厂类的方法的多态来实现对多种不同产品的创建。其C#示例代码如下所示。

namespace FactoryMethod
{
class Program
{
public interface IProduct
{
void ProductName();
}

public class CRadio : IProduct
{
public void ProductName()
{
Console.WriteLine(
" Radio " );
}
}

public class CTV : IProduct
{
public void ProductName()
{
Console.WriteLine(
" TV " );
}
}

public interface IFactory
{
IProduct CreateProduct(
string ProductName);
}

public class CConcreteFactory
{
public IProduct CreateProduct( string ProductName)
{
if ( 0 == ProductName.CompareTo( " TV " ))
{
return new CTV();
}
else
{
return new CRadio();
}
}
}

static void Main( string [] args)
{
CConcreteFactory ConFactory
= new CConcreteFactory();
IProduct TVProduct
= ConFactory.CreateProduct( " TV " );
TVProduct.ProductName();

IProduct RadioProduct
= ConFactory.CreateProduct( " Radio " );
RadioProduct.ProductName();

Console.Read();
}
}
}

(2) AbstractFactory模式主要是通过工厂类的不同的子类来实现不同类别的产品的创建。其C#示例代码如下所示:

namespace AbstractFactory
{
class Program
{
public interface IProduct
{
void ProductName();
}

public class CRadio : IProduct
{
public void ProductName()
{
Console.WriteLine(
" Radio " );
}
}

public class CTV : IProduct
{
public void ProductName()
{
Console.WriteLine(
" TV " );
}
}

public interface IFactory
{
IProduct CreateProduct(
string ProductName);
}

public class CRadioFactory
{
public IProduct CreateProduct()
{
return new CRadio();
}
}

public class CTVFactory
{
public IProduct CreateProduct()
{
return new CTV();
}
}

static void Main( string [] args)
{
CTVFactory TVFactory
= new CTVFactory();
IProduct TVProduct
= TVFactory.CreateProduct();
TVProduct.ProductName();

CRadioFactory RadioFactory
= new CRadioFactory();
IProduct RadioProduct
= RadioFactory.CreateProduct();
RadioProduct.ProductName();

Console.Read();
}
}
}

 

 

转载于:https://www.cnblogs.com/xianyunhe/archive/2011/05/29/2062377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值