《大话设计模式》阅读笔记

以下纯属个人心得,如果不对,敬请指教,还有欢迎交流;

1、简单工厂模式:

    思想:首先根据对象的属性抽象出一个超类,然后继承该超类具体化各个子类,然后建立一个工厂,该工厂通过识别不同的传入参数来动态的创建各个子类

    优点:工厂中通过必要的逻辑判断来决定究竟创建哪一个子类,这样的话用户就不需要自己根据属性来判断应该创建哪一个类对象了,而是仅仅提供属性来让其自行判断来实例化具体的子类对象;

    缺点:当子类不断增多,可能会出现根据条件来判断应该实例化哪一个对象,这样在工厂中的判断语句就会交错的来通过条件和属性来具体实例化子类,这样对系统的可维护性和可扩展性就会大大减低

    使用情况:a、子类不多;b、客户只知道属性参数,而且不关系具体的创建过程

    UML类图:

      

2、策略模式:

   思想:定义了算法家族,分别封装起来,让他们之间可以互相替换,这个模式让算法的变化不会影响到使用算法的客户

   实现方式:首先定义一个超类,该超类中有一个纯虚函数的算法公共接口,然后继承该超类具体化各个算法子类,重载父类的纯虚函数的算法接口,然后定义一个应用上下文类,该类中包含一个超类的对象指针,然后自定义一个带超类对象指针的构造函数,外部通过传入不同的子类对象指针来实现调用哪一个算法类;

   策略模式和简单工厂模式的结合:如果客户不需要知道具体算法类的构造细节,而且不用自行通过属性来判断调用哪一个算法子类,就可以就可以将应用上下文中构造参数改为属性参数,通过属性参数在应用上下文内部实例化具体算法对象,将该对象赋值给该类中超类对象指针;然后调用该超类对象的算法接口就可以实现了;

    优点:算法很独立,可以任意进行扩展;

    缺点:因为每个算法策略类都会产生一个新类,维护困难

    使用情况:算法实现相同的工作,只是具体实现细节不一样;

    UML类图:

       

  

9、原型模式:

    思想:从一个对象创建另外一个可制定的对象,而不需要知道任何创建的细节

    优点:隐藏对象创建的细节,代码更加优化,性能更优;

    实现方法:在内中增加一个接口,复制对象,返回新对象的指针;

    说明:在C++中系统会提供一个默认的复制构造函数;但是它只会复制普通属性,对于静态属性,因为是共有的,所以没有复制,还有对于堆栈它也没有复制,仅仅复制了一个指针,指向这块堆栈内存(浅拷贝);这里出现的问题就是这块堆栈内存的所有权很混乱,最致命的就是你析构的时候因为第一个对象析构了一次,而第二个对象又析构就出现bug了;所以如果类中拥有堆栈的情况必须自定义一个复制构造函数,来重新分配堆栈,将原来的堆栈复制进来(深拷贝);

    浅拷贝:如果一个类拥有资源(堆栈,系统资源),在复制过程中没有复制这些资源的情况;

    深拷贝:复制了类拥有的资源

 

   

10、模板方式模式:

    思路:抽离出一个操作的基本骨架,然后利用多态进行实例化具体细节

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值