#include <iostream>
#include <string>
#include <list>
#include <vector>
using namespace std;
enum COLOR{WHITE,BLACK}; /************************************************************************/
/* 装饰模式的作用是为对象增加属性 */
/************************************************************************/ struct PiecePos
{
int x;
int y;
PiecePos(int a,int b):x(a),y(b){}
}; class Piece
{
public:
virtual void draw(){}
};
class BlackPiece:public Piece
{
public:
virtual void draw(){cout << " set a black piece"<<endl;}
};
class WhitePiece:public Piece
{
public:
virtual void draw(){cout << " set a white piece"<<endl;}
}; class PieceBoard
{
public:
PieceBoard(string balckname,string whitename):
m_whitename(whitename),m_balckname(balckname),m_blackpiece(NULL),m_whitepiece(NULL)
{ }
void SetPiece(COLOR color,PiecePos pos)
{
if (color == BLACK)
{
if (NULL == m_blackpiece)
{
m_blackpiece = new BlackPiece();
}
cout << m_balckname << " on the pos" << pos.x << " and " << pos.y;
m_blackpiece->draw();
}
else
{
if (NULL == m_whitepiece)
{
m_whitepiece = new WhitePiece();
}
cout << m_whitename << " on the pos" << pos.x << " and " << pos.y;
m_whitepiece->draw();
}
m_vecPos.push_back(pos);
}
private:
vector<PiecePos> m_vecPos;
Piece *m_blackpiece;
Piece *m_whitepiece;
string m_balckname;
string m_whitename;
}; int main()
{
PieceBoard pieceboard("A","B");
pieceboard.SetPiece(WHITE,PiecePos(4,6));
pieceboard.SetPiece(BLACK,PiecePos(3,5));
pieceboard.SetPiece(WHITE,PiecePos(2,8));
pieceboard.SetPiece(BLACK,PiecePos(1,9));
return 0;
}

享元模式原理:所谓享元模式,是共享一些元数据对象,例如棋盘的棋子,如果我们对每个棋子建立一个对象然后组织成一个容器,则需要很多个对象。可以只建立两个对象,一个黑子对象,一个白子对象,由棋盘共享,棋盘维护一个保存棋子位置的对象。

代码如下:

设计模式之享元模式(FlyWeight)的更多相关文章

  1. 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)

    原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...

  2. 设计模式-11享元模式(Flyweight Pattern)

    1.模式动机 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈. 享元模式就是把相同或相似对象的公共部分提取出 ...

  3. 二十四种设计模式:享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...

  4. 设计模式之享元模式(Flyweight)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. 【UE4 设计模式】享元模式 Flyweight Pattern

    概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...

  6. [设计模式] 11 享元模式 Flyweight

    转 http://blog.csdn.net/wuzhekai1985/article/details/6670298 问题 在面向对象系统的设计何实现中,创建对象是最为常见的操作.这里面就有一个问题 ...

  7. 设计模式 笔记 享元模式 Flyweight

    //---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1 ...

  8. 【设计模式】—— 享元模式Flyweight

    前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是 ...

  9. 结构型设计模式之享元模式(Flyweight)

    结构 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 一个应用程序使用了大量的对象. 完全由于使用大量的对象,造成很大的存储开销. 对象的大多数状态都可变为外部状态. 如果删除对象的外部状态, ...

随机推荐

  1. DataGridView控件中添加ComboBox下拉列表框的实现

    //ComboBox控件拖放到DataGridView控件的某个位置 //添加年龄下拉框 private void BindAge() { //我这里添加的是静态数据,一般都是从数据库读出来的,这里就 ...

  2. WPF: 读取XPS文件或将word、txt文件转化为XPS文件

    读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: <Window x:Class="WpfWord.MainWindow" xm ...

  3. 问题记录:android.os.NetworkOnMainThreadException异常

    在MainActivity的主线程中访问网络将会发生异常 查阅资料后发现 Android4.0 以后不允许在主线程进行网络连接

  4. 04-树6 Complete Binary Search Tree

    完全二叉树 刚开始只发现了中序遍历是从小到大顺序的.一直在找完全二叉树的层结点间规律...放弃了 不曾想,完全二叉树的规律早就知道啊.根结点为i,其左孩子结点2*i, 右孩子结点2*i+1. 结合此两 ...

  5. [terry笔记]物化视图 materialized view基础学习

    一.物化视图定义摘录:     物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...

  6. Python学习教程(learning Python)--2.3.4Python函数返回值

    本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...

  7. Java学习中,常用的命令管理(Java 学习中的小记录)

    Java学习中,常用的命令管理      作者:王可利(Star·星星) 一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始  ---->所有程序---& ...

  8. STM32单片机实现中断后不继续向下执行而是返回到main函数

    做公司的一个项目,实现一个功能就是 机器在进行一项功能时(这项工作时间挺长),想要取消这项工作,重新选择.想了半天没想出来,结果同事提醒了一句,可以在程序中加一个外部中断,在中断中软件复位程序.用到以 ...

  9. EMVTag系列16《AC响应数据》

    在一个联机交易中,要传送到发卡行的专有应用数据. 字段 长度(字节) 赋值 说明 长度 1 07 分散密钥索引 1 00 密文版本号 1 01 根据发卡行密钥版本设置 卡片验证结果(CVR) 4 03 ...

  10. [Environment Build] Maven环境配置

    1. 下载并解压maven文件 2. 在环境变量中配置一个JAVA_HOME的变量,指向你本地的JDK 3. 在系统变量中新建一个名为:MAVEN_HOME的变量,指向你的maven解压文件的bin目 ...