#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. Data Mover Script Templates

    Datamover is probably the best way to export and import data between PeopleSoft databases and the sc ...

  2. jQuery类级别插件--返回顶部,底部,去到任何部位

    先引入js:<script type="text/javascript" src="jquery.js" ></script><s ...

  3. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

  4. C++不完整的类型

    今天写C++primer 5th中文版第422页的程序时,出现了”不允许使用不完整的类型“的错误,下面我就用类A 与 类B 作为代表,重现一下该错误,并且提出解决方案. 一.带问题的类设计A: 1.类 ...

  5. STM32F0xx_TIM基本延时配置详细过程

    前言 关于定时器大家都应该不会陌生,因为处理器都有这个功能.今天总结的F0系列芯片的定时器根据芯片型号不同,数量也不同.定时器分类:基本定时器.通用定时器和高级定时器.计数位数也有不同,有16位的,有 ...

  6. selenium+python登录登出百度,等待页面加载,鼠标定位

    #coding:gbk from selenium import webdriver from selenium.webdriver.common.keys import Keys from sele ...

  7. [转]C++编写Config类读取配置文件

    //Config.h #pragma once #include <string> #include <map> #include <iostream> #incl ...

  8. lnmp的使用

    命令 1.状态管理 lnmp {start|stop|reload|restart|kill|status} 2.添加虚拟host lnmp vhost add

  9. WebApp JS 打开 app

    产品需求:分享出去的链接比如到微信朋友圈,微博的H5页面,添加一个按钮 open App 用来打开并启动自己公司的APP (如果当前手机已经安装自己公司的APP) 废话少说直接上代码: <inp ...

  10. ORACLE-RAC-11G-R2_INSTALL

    ORACLE 11.2.0.3 RAC INSTALL                                                                       20 ...