zoukankan      html  css  js  c++  java
  • 学习日记之工厂方法模式和Effective C++

    简单工厂模式VS工厂方法模式:


    简单工厂模式:最大长处在于工厂类中必须包括必要的逻辑推断,依据client选择条件动态实例化相关类,对于client来说,去除了与详细产品的依赖。


    工厂方法模式(Factory Method)。定义一个用于创建对象的接口。让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。


    工厂方法模式实现时。client须要决定实例化哪一个工厂来实现对应的类。选择推断的问题还是存在的,也就是说,工厂方法模式把简单工厂的内部逻辑推断移动了client代码来进行。

    想要加功能,在简单工厂模式中,须要改工厂类,而若使用工厂方法模式,须要改client。


    Effective C++:

    1:别让异常逃离析构函数

    (1)。析构函数绝对不能吐出异常。假设一个被析构函数调用的函数可能抛出异常。析构函数必须捕捉不论什么异常,然后吞下他们或者结束程序。

    (2)。假设客户须要对某个操作函数执行期间抛出的异常进行反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。

    2:决不在构造或者析构函数中调用virtual函数

    (1)。在构造或者析构中绝不要调用virtual函数。由于这类调用绝不下降到derived class(比起当前运行构造和析构的类)

    3:另Oprerate=返回一个Reference to *this

    4:在Operate=中处理“自我赋值”

    (1),确保当对象自我赋值时 operate= 有良好行为。

    当中技术包含比較“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及 copy-and-swap。

    (2),确定不论什么函数操作一个以上的对象。而当中多个对象是同一个对象时。其行为仍然正确。

    5:复制对象时勿忘记base class 中的成分

    (1),Copying 函数应该确保复制”对象内全部成员变量“以及”全部 base class 成分"。

    (2)。不要尝试以某个 copying 函数实现还有一个 copying 函数。应该将共同技能放进第三个函数中,并由两个 copying 函数共同调用。

    6:以对象管理资源

    (1),为了防止资源泄露,请使用RAII (Resource Acquisition Is Initialization)对象。他们在构造函数中获取资源并在析构函数中释放资源。

    (2),两个常被使用的RAII classes 各自是 tr1::shared_ptr 和 auto_ptr 。前者一般是较佳选择,由于其 copy 行为比較直观。若选择 auto_ptr ,复制动作会使它指向NULL。

    7:在资源管理类中小心 copying 行为

    (1),复制 RAII 对象必须一并复制它所管理的资源。所以资源的 copying 行为决定 RAAI 对象的 copying 行为。

    (2)。普遍而常见的 RAAI class copying 行为是:抑制 copying、施行引用计数器法(reference counting)。

    只是其它行为也都可能被实现。


  • 相关阅读:
    hdu 2211(约瑟夫环问题)
    hdu 3605(二分图的多重匹配 | 网络流)
    hdu 3360(经典二分匹配)
    hdu 2255(KM)
    ajax无翻页刷新简单实例2
    在Updatepanel中使用Response.Redirect
    asp.net 使用UpdatePanel 返回服务器处理后弹出对话框
    再记一个SQL分页存储过程
    DIV中图片垂直居中
    在Repeter中用RadioButton生成单选按钮组的实现
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6790588.html
Copyright © 2011-2022 走看看