美文网首页
cocos2dx常见的设计模式

cocos2dx常见的设计模式

作者: 咸鱼而已 | 来源:发表于2018-03-16 10:24 被阅读15次
  1. 观察者模式:定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

事件机制

--注册事件
local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
local customer = cc.EventListenerCustom:create("MY_CUSTOM_EVENT",
                            function ( )
                                gt.log("======EventListenerCustom======")
                            end)
eventDispatcher:addEventListenerWithFixedPriority(customer, 1)
--派发事件
eventDispatcher:dispatchCustomEvent("MY_CUSTOM_EVENT")
  1. 单例模式:简单易用,限制一个类只有一个实例,可以减少创建多个对象可能会引起的内存问题的风险,包括内存泄漏、内存占用问题

CCDirector ,CCTextureCache, CCSpriteFrameCache, CCAnimationCache, CCUserDefault, CCNotificationCenter, CCShaderCache, CCScriptEngineManager, CCFileUtils, SimleAudioEngie

3.简单工厂模式、工厂模式、抽象工厂模式

AbstractProduct.hpp

#ifndef AbstractProduct_hpp
#define AbstractProduct_hpp

#include <stdio.h>

class AbstractProduct{
public:
    AbstractProduct();
    virtual ~AbstractProduct();

    virtual void operation() = 0;
};

//productA
class ProductA:public AbstractProduct{
public:
    ProductA();
    virtual ~ProductA();

    void operation();
};

//productB
class ProductB:public AbstractProduct{
public:
    ProductB();
    virtual ~ProductB();
    
    void operation();
    
};
#endif /* AbstractProduct_hpp */

AbstractProduct.cpp

#include "AbstractProduct.hpp"
#include <iostream>

AbstractProduct::AbstractProduct(){
}
AbstractProduct::~AbstractProduct(){
}

//A
ProductA::ProductA(){
}
ProductA::~ProductA(){
}

void ProductA::operation(){
    std::cout<<"ProductA operation"<<std::endl;
}

//B
ProductB::ProductB(){
}
ProductB::~ProductB(){
}
void ProductB::operation(){
    std::cout<<"ProductB operation"<<std::endl;
}

工厂模式实现:
AbstructFactory.hpp

#ifndef AbstructFactory_hpp
#define AbstructFactory_hpp

#include <stdio.h>
#include "AbstractProduct.hpp"

class AbstructFactory{
public:
    AbstructFactory();
    virtual ~AbstructFactory();
    virtual AbstractProduct* createProduct() = 0;
};

class FactoryA:public AbstructFactory{
public:
    FactoryA();
    virtual ~FactoryA();
    AbstractProduct* createProduct();
    
};

class FactoryB:public AbstructFactory{
public:
    FactoryB();
    virtual ~FactoryB();
    AbstractProduct* createProduct();
    
};
#endif /* AbstructFactory_hpp */

AbstructFactory.cpp

#include "AbstructFactory.hpp"

AbstructFactory::AbstructFactory(){
}
AbstructFactory::~AbstructFactory(){
}

FactoryA::FactoryA(){
}

FactoryA::~FactoryA(){
}

AbstractProduct* FactoryA::createProduct(){
    AbstractProduct* temp = new ProductA();
    return  temp;
}

FactoryB::FactoryB(){
}

FactoryB::~FactoryB(){
}

AbstractProduct* FactoryB::createProduct(){
    AbstractProduct* temp = new ProductB();
    return temp;
}

简单工厂模式:
SimpleFactory.hpp

#ifndef SimpleFactory_hpp
#define SimpleFactory_hpp

#include <stdio.h>
#include "AbstractProduct.hpp"

class SimpleFactory{
public:
    enum ProductType {
        p_productA,
        p_productB
    };
    
    SimpleFactory();
    virtual ~SimpleFactory();
    AbstractProduct* createProduct(int pType);
};
#endif /* SimpleFactory_hpp */

SimpleFactory.cpp

#include "SimpleFactory.hpp"

SimpleFactory::SimpleFactory(){
}

SimpleFactory::~SimpleFactory(){
}

AbstractProduct* SimpleFactory::createProduct(int pType){
    AbstractProduct* p = nullptr;
    switch (pType) {
        case SimpleFactory::p_productA:
            p = new ProductA();
            break;
        case SimpleFactory::p_productB:
            p = new ProductB();
            break;
            
        default:
            break;
    }
    return  p;
}

main.cpp

#include <iostream>
#include "SimpleFactory.hpp"
#include "AbstructFactory.hpp"

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
#pragma 简单工厂模式test
    std::cout<<"=================简单工厂模式=====================\n";
    SimpleFactory s_Factory = SimpleFactory();
    AbstractProduct* p_a = s_Factory.createProduct(SimpleFactory::p_productA);
    p_a->operation();
    
    AbstractProduct* p_b =s_Factory.createProduct(SimpleFactory::p_productB);
    p_b->operation();
    
#pragma 工厂模式
    std::cout<<"\n=================工厂模式=====================\n";
    FactoryA a_factory = FactoryA();
    AbstractProduct* f_p_a = a_factory.createProduct();
    f_p_a->operation();
    
    FactoryB b_factory = FactoryB();
    AbstractProduct* f_p_b = b_factory.createProduct();
    f_p_b->operation();
    
    
    
    return 0;
}

4.代理模式

相关文章

  • cocos2dx常见的设计模式

    观察者模式:定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷...

  • cocos2dx的几种常见设计模式

    设计模式——二段构建模式 设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 设计模式

    常见的设计模式有哪些? 常见的工厂模式,代理模式,模板方法模式,责任链模式,单例模式,包装设计模式,策略模式等。手...

  • 设计模式

    Android开发中常见的设计模式Java设计模式:23种设计模式全面解析(超级详细)Android的设计模式-设...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • java涨薪技能

    一:常见模式与工具 学习Java技术体系,设计模式,流行的框架与组件是必不可少的: 常见的设计模式,编码必备 Sp...

  • 为什么说 Java 程序员到了必须掌握 Spring Boot

    一:常见模式与工具 学习Java技术体系,设计模式,流行的框架与组件是必不可少的: 常见的设计模式,编码必备 Sp...

  • 金三银四跳槽涨薪50%?你需要掌握这些技术点!

    一:常见模式与工具 学习Java技术体系,设计模式,流行的框架与组件是必不可少的: 常见的设计模式,编码必备 Sp...

网友评论

      本文标题:cocos2dx常见的设计模式

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