首页 > 其他分享 >享元模式

享元模式

时间:2023-06-09 12:15:11浏览次数:30  
标签:享元 draw pieceBoard color 模式 int PiecePos Piece

一、截图

 二、代码示例

#include <iostream>
#include <string>
#include <vector>
using namespace std;

//棋子的颜色
enum PieceColor { BLACK, WHTIE };
//棋子的位置
struct PiecePos {
    int m_x;
    int m_y;
    PiecePos(int a, int b) :m_x(a), m_y(b) {}
};

class Piece {

public:
    Piece(PieceColor color) : m_color(color) {

    }
    ~Piece() {}
    virtual void draw() {}
protected:
    PieceColor m_color;
    
};

class BlackPiece :public Piece {
public:
    BlackPiece(PieceColor color) :Piece(color) {}
    ~BlackPiece() {}
    void draw() { cout << "绘制一个黑棋 " << endl; }
};
class WhitePiece :public Piece {
public:
    WhitePiece(PieceColor color) :Piece(color) {}
    ~WhitePiece() {}
    void draw() { cout << "绘制一个白棋 " << endl; }
};

class PieceBoard {
public:
    PieceBoard(string black, string white) :m_blackName(black), m_WhiteName(white) {
        m_pBlackPiece = nullptr;
        m_pWhitePiece = nullptr;
    }
    ~PieceBoard()
    {
        clear();
    }
    void setPiece(PieceColor color, PiecePos pos) {
        
        if (color == BLACK) {
            if(m_pBlackPiece == nullptr)
                m_pBlackPiece = new BlackPiece(color);
            
            cout << m_blackName << "在" << pos.m_x << "," << pos.m_y << "下了一步" << endl;
            m_pBlackPiece->draw();
        }
        else {
            if(m_pWhitePiece == nullptr)
                m_pWhitePiece = new WhitePiece(color);
            
            
            cout << m_WhiteName << "在" << pos.m_x << "," << pos.m_y << "下了一步" << endl;
            m_pWhitePiece->draw();
        }
        m_vecPiece.push_back(pos);
    }
    void clear() {
        delete m_pBlackPiece;
        delete m_pWhitePiece;
    }
private:
    vector<PiecePos> m_vecPiece;//棋盘上的棋子,
    string m_blackName;
    string m_WhiteName;
    Piece* m_pBlackPiece;
    Piece* m_pWhitePiece;
};


int main(void) {
    
    PieceBoard pieceBoard("laoxia", "laoding");
    pieceBoard.setPiece(BLACK, PiecePos(44, 37));
    pieceBoard.setPiece(WHTIE, PiecePos(19, 70));
    pieceBoard.setPiece(BLACK, PiecePos(1, 1));
    pieceBoard.setPiece(WHTIE, PiecePos(2, 2));
    system("pause");
    return 0;
}
View Code

 

标签:享元,draw,pieceBoard,color,模式,int,PiecePos,Piece
From: https://www.cnblogs.com/zeliangzhang/p/17468878.html

相关文章

  • 潜在失效模式及其影响分析(DFMEA)介绍
    DFMEA是潜在失效模式及其影响分析(DesignFailureModeandEffectsAnalysis)的缩写。DFMEA是一种对产品设计的预防性质量管理工具,旨在识别、评估和减少产品设计中的潜在失效模式及其影响。DFMEA通常由一个跨职能团队完成,包括产品开发工程师、测试工程师、供应商以及其他关键领域专......
  • 策略模式
    一提到策略模式,有人就觉得,它的作用是避免if-else分支判断逻辑。实际上,这种认识是很片面的。策略模式主要的作用还是解耦策略的定义、创建和使用,控制代码的复杂度,让每个部分都不至于过于复杂、代码量过多。除此之外,对于复杂代码来说,策略模式还能让其满足开闭原则,添加新策略的时候......
  • Linux 通过修改 grub 文件禁用节能模式
    1、执行vi/etc/default/grub命令以编辑该文件 将光标移至GRUB_CMDLINE_LINUX行,在rhgb前新增intel_idle.max_cstate=0intel_pstate=disable字段,输入wq命令,按回车即能保存退出。2、生成启动文件 3、将改动写入镜像 最后执行reboot或者shutdown-rnow命令来......
  • Vue开发实战(02)-MVVM模式
    1JQ实现待办任务列表<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>TodoListJquery</title><scriptsrc='jquery.js'></script></head><......
  • 设计模式系列 | 建造者模式
    很多人也都听说过建造者设计模式,但总是对这个设计模式理解得不够透彻,今天我们就来聊聊建造者设计模式。另外也说说建造者设计模式和工厂模式的区别。定义其实建造者设计模式的定义,很多事看不懂的,也是记不住的,但我们还是得先来看看是如何定义的。TheintentoftheBuilderdesignp......
  • 深入浅出模板模式和动态代理
    模板模式模板模式是使用最频繁的设计模式之一,如果能正确的使用好模板模式,能使代码更加优雅,同时也便于后期维护和扩展。另外也是面试常问的设计模式之一。本次Chat分享的是易懂版模板模式,首先了解模板模式,然后会例举多个生活实例,再写一个案例,最后介绍Spring和Mybatis源码......
  • 转载:Spring 框架的设计理念与设计模式分析
    Spring框架的设计理念与设计模式分析<!--LEADSPACE_BODY_END--><!--SUMMARY_BEGIN-->Spring作为现在最优秀的框架之一,已被广泛的使用,并且有很多对其分析的文章。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念,有那几个核心组件?为......
  • 单例这种设计模式
    随着我们编写代码的深入,我们或多或少都会接触到设计模式,其中单例(Singleton)模式应该是我们耳熟能详的一种模式。本文将比较特别的介绍一下Java设计模式中的单例模式。概念单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。实现思路在单例的类中......
  • JAVA微信扫码支付模式二功能实现完整例子
    概述本例子实现微信扫码支付模式二的支付功能,应用场景是,web网站微信扫码支付。实现从点击付费按钮、到弹出二维码、到用户用手机微信扫码支付、到手机上用户付费成功、web网页再自动调整到支付成功后的页面,这一个过程。详细一、准备工作先开通微信公众号,再开通微......
  • Java中枚举类的特殊用法-使用枚举实现单例模式和策略模式
    上面针对枚举类实现单例模式和策略模式有所涉及,下面补充。Java中使用枚举类实现单例模式为什么可以这样做?枚举类不能new,因此保证单例枚举类不能被继承类不加载时,不会实例化使用枚举类创建的单例还有一个好处,就是即使使用反射,也无法打破它的单例性质新建枚举类publicenumSingleEn......