美文网首页
c++学习记录3(GeekBand)

c++学习记录3(GeekBand)

作者: shenhua8369 | 来源:发表于2016-05-29 16:09 被阅读0次

第三周的课学到有关面向对象的设计模式的东西。抛开课堂上讲的三种不谈,来说说常用的几种设计模式。

一、Strategy模式

1、两大原则

Strategy模式体现了如下的两大原则:

1,针对接口编程,而不是针对实现编程。

2,多用组合,少用继承。

二、Iterator模式

提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

这种设计模式非常普遍,

比如Java里面的:

public interface Iterator {

boolean hasNext();

Object next();

void remove();

}

以及C++ STL里面的 iterator使用 ++ 访问。

三、Singleton模式

下面是个C++ singleton的类:

、、、

#ifndefSINGLETON_H

#defineSINGLETON_H

#include"synobj.h"

template

classSingleton{

CLASS_UNCOPYABLE(Singleton)

public:

staticT&Instance(){//Uniquepointofaccess

if(0==_instance){

Locklock(_mutex);

if(0==_instance){

_instance=newT();

atexit(Destroy);

}

}

return*_instance;

}

protected:

Singleton(){}

~Singleton(){}

private:

staticvoidDestroy(){//Destroytheonlyinstance

if(_instance!=0){

delete_instance;

_instance=0;

}

}

staticMutex_mutex;

staticT*volatile_instance;//Theoneandonlyinstance

};

template

MutexSingleton::_mutex;

template

T*volatileSingleton::_instance=0;

#endif

、、、

四、Factory Method模式

Factory Method模式在不同的子工厂类生成具有统一界面接口的对象,一方面,可以不用关心产品对象的具体实现,简化和统一Client调用过程;另一方面,可以让整个系统具有灵活的可扩展性。

abstract class BallFactory{

protectedabstractBallmakeBall();//FactoryMethod

}

classBasketballFactextendsBallFactory{

publicBallmakeBall(){//子类实现FactoryMethod决定实例化哪一个类的

returnnewBasketball();

}

}

classFootballFactextendsBallFactory{

publicBallmakeBall(){//子类实现FactoryMethod决定实例化哪一个类的

returnnewFootball();

}

}

classBasketballextendsBall{

publicvoidplay(){

System.out.println("playthebasketball");

}

}

classFootballextendsBall{

publicvoidplay(){

System.out.println("playthefootball");

}

}

abstractclassBall{

protectedabstractvoidplay();

}

publicclasstest{

publicstaticvoidmain(String[]args){

BallFactoryballFactory=newBasketballFact();

Ballbasketball=ballFactory.makeBall();

basketball.play();

ballFactory=newFootballFact();

Ballfootball=ballFactory.makeBall();

football.play();

}

}

这是几种常用的设计模式,剩下的还有很多,毕竟有23种呢。剩下的有时间慢慢学习。

ps:没找到简书怎么写代码。看着乱糟糟的格式,真是蛋疼。

相关文章

  • c++学习记录3(GeekBand)

    第三周的课学到有关面向对象的设计模式的东西。抛开课堂上讲的三种不谈,来说说常用的几种设计模式。 一、Strateg...

  • monolake 的GeekBand C++开发学习笔记(一)

    前记:开始第一课GeekBand C++开发工程师课程的学习,同时也开始写自己的第一篇C++笔记博客,记录下自己的...

  • c++学习记录7(GeekBand)

    这周的课程将容器讲完了。自己来总结下容器的东西。 参考:STL源码分析 (一)vector容器 vector的数据...

  • c++学习记录5(GeekBand)

    说说new的六种重载形式: 全局的new有六种重载形式, void *operator new(std::size...

  • c++学习记录6(GeekBand)

    这周作业是和vector有关的,就找了找vector相关的内容。如下: vector是C++标准模板库中的部分内容...

  • c++学习记录8(GeekBand)

    这周的课讲了将泛型算法。现在将泛型算法收集下,备用。 (1)泛型算法用迭代器来解决第一个要求:遍历容器。所有迭代器...

  • c++学习记录9(GeekBand)

    聊聊观察者模式 先前用过一些语言,比如js,as之类。这些语言里面很常见的就是事件。一个对象发生变化,可以通过事件...

  • c++学习记录10(GeekBand)

    这周课程继续设计模式。这里选出来最常用的工厂模式来说说。 先来说说,工厂模式使用的场景: 1.当你遇到需要创建的对...

  • c++学习记录12(GeekBand)

    这周的课听得有些迷糊,现在记录下,以备后面查看。 七剑客: 1.同步 2.网络 http1.0和http1.1的区...

  • c++学习记录11(GeekBand)

    Composite组合模式 作用: 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户...

网友评论

      本文标题:c++学习记录3(GeekBand)

      本文链接:https://www.haomeiwen.com/subject/uydqdttx.html