抽象工厂模式之C#、C++实现

3 篇文章 0 订阅
2 篇文章 0 订阅

抽象工厂模式 别名:Kit
遵循原则:依赖倒置
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类;
适用:
1、系统独立于它的产品的创建、组合、表示时
2、系统需要多个产品系列配置时
3、一系列相关产品进行联合使用时
4、提供产品类库,而只想显示它们的接口而不是实现时
参与者:
AbstractFactory
Concretefactory
AbstractProduct
ConcreteProduct
Client
效果:
1、分离了具体的类
2、易于交换产品系列
3、有利于产品的一致性
缺点:
难于支持新种类产品
参与者:
AbstractFactory、ConcreteFactory、AbstractProduct、ConcreteProduct、Client
实现:
1、工厂通常采用单件类实现;
2、创建产品通常为每一产品定义一工厂方法。有可能出现不同系列的产品差别很小,但却要定义一个具体工厂;多个产品系列中的具体工厂可以通过原型实现,具体工厂使用产品系列中的每个产品的原型实例来初始化,这样可使得不必每个新产品系列都需要一个新的具体工厂;
3、定义可扩展的工厂:采用标识性参数利用一个方法创建一组产品,虽灵活但不安全,在类C++语言中需要这些产品具体相同的基类或客户端可以安全地进行类型转换时,但支持类类型的语言中没有此约束;
相关:工厂方法[一般用来实现抽象工厂]、原型[抽象工厂的实现过程中的一种技巧]、单件[一般为单件类]
延伸:
Microsoft:IDbConnection类采用抽象工厂模式创建IDbCommand,但IDbCommand未采用抽象工厂模式创建IDbAdapter
实例:
C#
下面这个类扩展了DataCommand

namespace Sysnet.Data
{
    public static class DataAdapterHelper
    {
        public static DataAdapterBuilder Builder { get; set; }
        static DataAdapterHelper()
        {
            Builder = new DataAdapterBuilder();
        }
        public static IDataAdapter CreateDataAdapter(this IDbCommand command)
        {
            return Builder.CreateDataAdapter(command);//采用一个Builder主要是方便,将DataAdapter的创建功能的实现与接口进行分离,其思想是桥接模式
        }
        public static DataSet FillDataSet(this IDataAdapter adapter)
        {
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            return ds;
        }
        
    }
}



 

C++

class SQCOMMON_API CCommunicationInterface
{

private:
 DECLARE_PROPERTY(KeepOpen,bool)
public:
 //通讯方式的枚举定义
 enum CommunicationMethod 
 { 
  //串口通讯方式
  EnumCommuSerial,
  //Socket通讯方式
  EnumCommuSocket,
  //数据库通讯方式
  EnumCommuDatabase,
  //文件通讯方式
  EnumCommuFile 
 };
protected:
 //获取当前通讯接口下的一个通讯结点类型,此方法为工厂的产品方法
 virtual CCommuEndPoint * get_ACommuEndPoint();
public:
 //创建通讯接口
 static CCommunicationInterface * CreateCommunication(CommunicationMethod commuMethod,map<CString,_variant_t> ¶mters);
};

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值