学习AA大神c++设计新思维笔记:0809工厂与抽象工厂

对象工厂

功能:由标识产生对象,避免以前那种猜(类型)语句.以达到不修改文件,只增加文件(更易维护)的目的.类之间要相互隔离.
通过注册产品,由产品具体实现功能.工厂不必知道具体产品.当然,还要考虑错误处理.也可搞成策略.映射的插入有返回值.t=映.插入(...).第二,为成功与否.
关联向量,大量查找,少量插改.
F,注意,返回为基*.元<基,标识,参数>
还有克隆,基类声明个,子类再实现他.然后返回子类*,但这个有缺点.可以用,如果子类未实现,则编译器通知
产品有 具体,抽象之分.只有面对不同的抽象类型,才区分如 工厂<抽象1> 工厂<抽象2>
元<类 基,型名 标识,类 构造器>构 工厂
其中标识为枚举类型,然后把(标识,处理函数)一个个注册进去.再加个<单件>,成为唯一工厂.

    仿函数<渲染组件*,类型列表_2(::,)>       渲染创建者(&创造者::创建渲染组件);//通过名字空间来分隔.
    仿函数<物理组件*,类型列表_2(::,)>   物理创建者(&创造者::创建物理组件);

克隆工厂,的产品创建者,有个克隆函数.

抽象对象工厂

型2型用于消除歧义.优势是大小很小.

<类 T>构 抽象工厂单元{//核心中的核心
        虚 T*干创建(类型2类型<T>)=0;~抽象工厂单元(){}
    };//用于指明,每一个单项要实现的内容<类 型列,<>类 单元=抽象工厂单元>
    构 抽象工厂:公 生成分散层次<型列,单元>{//造
        用 产品列表=型列;<类 T>T*创建()
        {
            单元<T>*单元=;//类型要转成单元
            中 单元->干创建(类型2类型<T>());
        }//用于区分.
    };

自动生成抽象敌人工厂的第2个优点:可以自动化.
用 简单敌人工厂=具体工厂<抽象敌人工厂,新工厂,型列>,来实现.第一个为基,与流水钱差不多.
第1个模板参数,提供接口,第2个如何生成对象,第3个为生成哪些<具体型列>,对应基型列.
虚构造函数的两难问题:从无到有生成对象,得知道类型,而多态不要求这点.原型模式,借这个对象,然后用虚 函数,来实现多态.基于原型的方式不如基于模板的方式.
基于策略的模板,本质是利用好模板类作为模板参数,
新工厂需维护两个列表抽象列表,具体列表,而原型只需要一个抽象列表.实质上新工厂更简单更抽象.而作者未在原型上下功夫,可以更抽象一点的.新工厂只需要在具体列表中改改类名就行了.

<类 具体产品,类 基>
类 新工厂单元操作:公 基
{
    又 型名 基::产品列表 基产品列表;
保护:
    又 型名 基产品列表::尾 产品列表;:
    又 型名 基产品列表::头 抽象产品;
    具体产品*干创建(类型2类型<抽象产品>)
    {
        中 新 具体产品;
    }
};<类 抽象工厂,//提供接口<,>类 创建者=新工厂单元操作,//实现
    类 型列=抽象工厂::产品列表
>
构 具体工厂:公 层次生成器::生成线性层次<型名 TL::逆向<型列>::结果,创建者,抽象工厂>//实现在这里
{
    又 型名 抽象工厂::产品列表 产品列表;
    又 型列 具体产品列表;
};//层次生成器还是有用的.可以搞几个来
//下面是使用方式:
    又 类型列表_3(士兵,怪物,父怪物)基型列;
    又 类型列表_3(简单士兵,简单怪物,简单父怪物)简单型列;
    又 类型列表_3(困难士兵,困难怪物,困难父怪物)困难型列;
    又 具体工厂<抽象工厂<基型列>,新工厂单元操作,简单型列>简单工厂;
    又 具体工厂<抽象工厂<基型列>,新工厂单元操作,困难型列>困难工厂;

抽象工厂,是作为具体工厂的基.看使用方式.抽象工厂作为基,具体工厂根据策略,实现细节.上面就是抽象工厂的本质,就是根据抽象的工厂产生具体工厂.先接口(抽象工厂),后具体工厂+策略.而工厂模式,则是根据抽象产品产生具体产品.
工厂无需收集信息.只需要每个类型注册相关函数就行了.
抽象工厂缺点是:要求知道所有抽象类型,当然,还可以通过工厂模式的注册来降低此需求,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值