[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "#################\n## Eclipse\n#################\n\n_build/\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n\n[Dd]ebug/\n[Rr]elease/\nx64/\nbuild/\n[Bb]in/\n[Oo]bj/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.log\n*.scc\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.pubxml\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\n#packages/\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n#############\n## Windows detritus\n#############\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Mac crap\n.DS_Store\n\n\n#############\n## Python\n#############\n\n*.py[co]\n\n# Packages\n*.egg\n*.egg-info\ndist/\nbuild/\neggs/\nparts/\nvar/\nsdist/\ndevelop-eggs/\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n"
  },
  {
    "path": "LICENSE",
    "content": "版权说明\n=====================\n\n\n本书所有源代码及图片可自由分享，包括用于商业用途；\n\n由于部分章节内容使用到刘伟的课件《java设计模式》（互联网分享），所以本书\n文字内容不可用于商业目的（可在互联网自由分享）；\n\n本书内容转载请注明出处；\n\n参考：\n--------------------\n《Java设计模式》PPT , 刘伟\n"
  },
  {
    "path": "Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\trm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/redis.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/redis.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/redis\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/redis\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "behavioral_patterns/behavioral.rst",
    "content": ".. _behavioral:\n\n行为型模式\n====================\n\n\n行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。\n\n行为型模式不仅仅关注类和对象的结构，而且重点关注它们之间的相互作用。\n\n通过行为型模式，可以更加清晰地划分类与对象的职责，并研究系统在运行时实例对象\n之间的交互。在系统运行时，对象并不是孤立的，它们可以通过相互通信与协作完成某些复杂功能，一个对象在运行时也将影响到其他对象的运行。\n\n行为型模式分为类行为型模式和对象行为型模式两种：\n\n- 类行为型模式：类的行为型模式使用继承关系在几个类之间分配行为，类行为型模式主要通过多态等方式来分配父类与子类的职责。\n- 对象行为型模式：对象的行为型模式则使用对象的聚合关联关系来分配行为，对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”，系统中要尽量使用关联关系来取代继承关系，因此大部分行为型设计模式都属于对象行为型设计模式。\n\n**包含模式**\n\n- 职责链模式(Chain of Responsibility)\n    重要程度：3\n- 命令模式(Command)\n    重要程度：4\n- 解释器模式(Interpreter)\n    重要程度：1\n- 迭代器模式(Iterator)\n    重要程度：5\n- 中介者模式(Mediator)\n    重要程度：2\n- 备忘录模式(Memento)\n    重要程度：2\n- 观察者模式(Observer)\n    重要程度：5\n- 状态模式(State)\n    重要程度：3\n- 策略模式(Strategy)\n    重要程度：4\n- 模板方法模式(Template Method)\n    重要程度：3\n- 访问者模式(Visitor)\n    重要程度：1\n\n**目录**\n\n.. toctree::\n   :maxdepth: 2\n   :numbered: 2\n    \n   command\n   mediator\n   observer\n   state\n   strategy\n\n"
  },
  {
    "path": "behavioral_patterns/command.rst",
    "content": ".. _command:\n\n命令模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n在软件设计中，我们经常需要向某些对象发送请求，但是并不知道请求的接收者是谁，也不知道被请求的操作是哪个，我们只需在程序运行时指定具体的请求接收者即可，此时，可以使用命令模式来进行设计，使得请求发送者与请求接收者消除彼此之间的耦合，让对象之间的调用关系更加灵活。\n\n命令模式可以对发送者和接收者完全解耦，发送者与接收者之间没有直接引用关系，发送请求的对象只需要知道如何发送请求，而不必知道如何完成请求。这就是命令模式的模式动机。\n\n模式定义\n--------------------\n命令模式(Command Pattern)：将一个请求封装为一个对象，从而使我们可用不同的请求对客户进行参数化；对请求排队或者记录请求日志，以及支持可撤销的操作。命令模式是一种对象行为型模式，其别名为动作(Action)模式或事务(Transaction)模式。\n\n\n\n模式结构\n--------------------\n命令模式包含如下角色：\n\n- Command: 抽象命令类\n- ConcreteCommand: 具体命令类\n- Invoker: 调用者\n- Receiver: 接收者\n- Client:客户类\n\n\n.. image:: /_static/Command.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Command.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Command/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 10-13\n\n.. literalinclude:: /code/Command/Receiver.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Command/Receiver.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Command/ConcreteCommand.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 22   \n\n.. literalinclude:: /code/Command/ConcreteCommand.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 23-26\n\n.. literalinclude:: /code/Command/Invoker.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 17-23\n\n.. literalinclude:: /code/Command/Invoker.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 20-23\n\n运行结果：\n\n.. image:: /_static/Command_run.jpg\n\n\n模式分析\n--------------------\n命令模式的本质是对命令进行封装，将发出命令的责任和执行命令的责任分割开。\n\n- 每一个命令都是一个操作：请求的一方发出请求，要求执行一个操作；接收的一方收到请求，并执行操作。\n- 命令模式允许请求的一方和接收的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否被执行、何时被执行，以及是怎么被执行的。\n- 命令模式使请求本身成为一个对象，这个对象和其他对象一样可以被存储和传递。\n- 命令模式的关键在于引入了抽象命令接口，且发送者针对抽象命令接口编程，只有实现了抽象命令接口的具体命令才能与接收者相关联。\n\n\n实例\n--------------------\n实例一：电视机遥控器\n\n- 电视机是请求的接收者，遥控器是请求的发送者，遥控器上有一些按钮，不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演，有三个具体的命令类实现了抽象命令接口，这三个具体命令类分别代表三种操作：打开电视机、关闭电视机和切换频道。显然，电视机遥控器就是一个典型的命令模式应用实例。\n\n.. image:: /_static/Command_eg.jpg\n\n\n时序图:\n\n.. image:: /_static/seq_Command_eg.jpg\n\n\n优点\n--------------------\n命令模式的优点\n\n- 降低系统的耦合度。\n- 新的命令可以很容易地加入到系统中。\n- 可以比较容易地设计一个命令队列和宏命令（组合命令）。\n- 可以方便地实现对请求的Undo和Redo。\n\n\n缺点\n--------------------\n命令模式的缺点\n\n- 使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类，因此某些系统可能需要大量具体命令类，这将影响命令模式的使用。\n\n\n适用环境\n--------------------\n在以下情况下可以使用命令模式：\n\n- 系统需要将请求调用者和请求接收者解耦，使得调用者和接收者不直接交互。\n- 系统需要在不同的时间指定请求、将请求排队和执行请求。\n- 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。\n- 系统需要将一组操作组合在一起，即支持宏命令\n\n\n模式应用\n--------------------\n很多系统都提供了宏命令功能，如UNIX平台下的Shell编程，可以将多条命令封装在一个命令对象中，只需要一条简单的命令即可执行一个命令序列，这也是命令模式的应用实例之一。\n\n\n模式扩展\n--------------------\n宏命令又称为组合命令，它是命令模式和组合模式联用的产物。\n\n-宏命令也是一个具体命令，不过它包含了对其他命令对象的引用，在调用宏命令的execute()方法时，将递归调用它所包含的每个成员命令的execute()方法，一个宏命令的成员对象可以是简单命令，还可以继续是宏命令。执行一个宏命令将执行多个具体命令，从而实现对命令的批处理。\n\n总结\n--------------------\n- 在命令模式中，将一个请求封装为一个对象，从而使我们可用不同的请求对客户进行参数化；对请求排队或者记录请求日志，以及支持可撤销的操作。命令模式是一种对象行为型模式，其别名为动作模式或事务模式。\n- 命令模式包含四个角色：抽象命令类中声明了用于执行请求的execute()等方法，通过这些方法可以调用请求接收者的相关操作；具体命令类是抽象命令类的子类，实现了在抽象命令类中声明的方法，它对应具体的接收者对象，将接收者对象的动作绑定其中；调用者即请求的发送者，又称为请求者，它通过命令对象来执行请求；接收者执行与请求相关的操作，它具体实现对请求的业务处理。\n- 命令模式的本质是对命令进行封装，将发出命令的责任和执行命令的责任分割开。命令模式使请求本身成为一个对象，这个对象和其他对象一样可以被存储和传递。\n- 命令模式的主要优点在于降低系统的耦合度，增加新的命令很方便，而且可以比较容易地设计一个命令队列和宏命令，并方便地实现对请求的撤销和恢复；其主要缺点在于可能会导致某些系统有过多的具体命令类。\n- 命令模式适用情况包括：需要将请求调用者和请求接收者解耦，使得调用者和接收者不直接交互；需要在不同的时间指定请求、将请求排队和执行请求；需要支持命令的撤销操作和恢复操作，需要将一组操作组合在一起，即支持宏命令。\n\n"
  },
  {
    "path": "behavioral_patterns/mediator.rst",
    "content": ".. _mediator:\n\n中介者模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n- 在用户与用户直接聊天的设计方案中，用户对象之间存在很强的关联性，将导致系统出现如下问题：\n- 系统结构复杂：对象之间存在大量的相互关联和调用，若有一个对象发生变化，则需要跟踪和该对象关联的其他所有对象，并进行适当处理。\n- 对象可重用性差：由于一个对象和其他对象具有很强的关联，若没有其他对象的支持，一个对象很难被另一个系统或模块重用，这些对象表现出来更像一个不可分割的整体，职责较为混乱。\n- 系统扩展性低：增加一个新的对象需要在原有相关对象上增加引用，增加新的引用关系也需要调整原有对象，系统耦合度很高，对象操作很不灵活，扩展性差。\n- 在面向对象的软件设计与开发过程中，根据“单一职责原则”，我们应该尽量将对象细化，使其只负责或呈现单一的职责。\n- 对于一个模块，可能由很多对象构成，而且这些对象之间可能存在相互的引用，为了减少对象两两之间复杂的引用关系，使之成为一个松耦合的系统，我们需要使用中介者模式，这就是中介者模式的模式动机。\n\n\n模式定义\n--------------------\n中介者模式(Mediator Pattern)定义：用一个中介对象来封装一系列的对象交互，中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式，它是一种对象行为型模式。\n\n\n模式结构\n--------------------\n中介者模式包含如下角色：\n\n- Mediator: 抽象中介者\n- ConcreteMediator: 具体中介者\n- Colleague: 抽象同事类\n- ConcreteColleague: 具体同事类\n\n\n.. image:: /_static/Mediator.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Mediator.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Mediator/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 10-19\n\n.. literalinclude:: /code/Mediator/ConcreteMediator.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 23-26\n\n.. literalinclude:: /code/Mediator/ConcreteMediator.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 21-42\n\n.. literalinclude:: /code/Mediator/ConcreteColleagueA.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 20-21\n\n.. literalinclude:: /code/Mediator/ConcreteColleagueA.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 18-25\n\n运行结果：\n\n.. image:: /_static/Mediator_run.jpg\n\n\n模式分析\n--------------------\n中介者模式可以使对象之间的关系数量急剧减少。\n\n中介者承担两方面的职责：\n\n- 中转作用（结构性）：通过中介者提供的中转作用，各个同事对象就不再需要显式引用其他同事，当需要和其他同事进行通信时，通过中介者即可。该中转作用属于中介者在结构上的支持。\n- 协调作用（行为性）：中介者可以更进一步的对同事之间的关系进行封装，同事可以一致地和中介者进行交互，而不需要指明中介者需要具体怎么做，中介者根据封装在自身内部的协调逻辑，对同事的请求进行进一步处理，将同事成员之间的关系行为进行分离和封装。该协调作用属于中介者在行为上的支持。\n\n.. image:: /_static/Mediator_eg.jpg\n\n\n时序图\n\n.. image:: /_static/seq_Mediator_eg.jpg\n\n\n实例\n--------------------\n实例：虚拟聊天室\n\n某论坛系统欲增加一个虚拟聊天室，允许论坛会员通过该聊天室进行信息交流，普通会员(CommonMember)可以给其他会员发送文本信息，钻石会员(DiamondMember)既可以给其他会员发送文本信息，还可以发送图片信息。该聊天室可以对不雅字符进行过滤，如“日”等字符；还可以对发送的图片大小进行控制。用中介者模式设计该虚拟聊天室。\n\n\n优点\n--------------------\n中介者模式的优点\n\n- 简化了对象之间的交互。\n- 将各同事解耦。\n- 减少子类生成。\n- 可以简化各同事类的设计和实现。\n\n\n缺点\n--------------------\n中介者模式的缺点\n\n- 在具体中介者类中包含了同事之间的交互细节，可能会导致具体中介者类非常复杂，使得系统难以维护。\n\n\n适用环境\n--------------------\n在以下情况下可以使用中介者模式：\n\n- 系统中对象之间存在复杂的引用关系，产生的相互依赖关系结构混乱且难以理解。\n- 一个对象由于引用了其他很多对象并且直接和这些对象通信，导致难以复用该对象。\n- 想通过一个中间类来封装多个类中的行为，而又不想生成太多的子类。可以通过引入中介者类来实现，在中介者中定义对象。\n- 交互的公共行为，如果需要改变行为则可以增加新的中介者类。\n\n\n模式应用\n--------------------\nMVC架构中控制器\n\nController 作为一种中介者，它负责控制视图对象View和模型对象Model之间的交互。如在Struts中，Action就可以作为JSP页面与业务对象之间的中介者。\n\n\n模式扩展\n--------------------\n中介者模式与迪米特法则\n\n- 在中介者模式中，通过创造出一个中介者对象，将系统中有关的对象所引用的其他对象数目减少到最少，使得一个对象与其同事之间的相互作用被这个对象与中介者对象之间的相互作用所取代。因此，中介者模式就是迪米特法则的一个典型应用。 \n\n中介者模式与GUI开发\n\n- 中介者模式可以方便地应用于图形界面(GUI)开发中，在比较复杂的界面中可能存在多个界面组件之间的交互关系。\n- 对于这些复杂的交互关系，有时候我们可以引入一个中介者类，将这些交互的组件作为具体的同事类，将它们之间的引用和控制关系交由中介者负责，在一定程度上简化系统的交互，这也是中介者模式的常见应用之一。\n\n\n总结\n--------------------\n- 中介者模式用一个中介对象来封装一系列的对象交互，中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式，它是一种对象行为型模式。\n- 中介者模式包含四个角色：抽象中介者用于定义一个接口，该接口用于与各同事对象之间的通信；具体中介者是抽象中介者的子类，通过协调各个同事对象来实现协作行为，了解并维护它的各个同事对象的引用；抽象同事类定义各同事的公有方法；具体同事类是抽象同事类的子类，每一个同事对象都引用一个中介者对象；每一个同事对象在需要和其他同事对象通信时，先与中介者通信，通过中介者来间接完成与其他同事类的通信；在具体同事类中实现了在抽象同事类中定义的方法。\n- 通过引入中介者对象，可以将系统的网状结构变成以中介者为中心的星形结构，中介者承担了中转作用和协调作用。中介者类是中介者模式的核心，它对整个系统进行控制和协调，简化了对象之间的交互，还可以对对象间的交互进行进一步的控制。\n- 中介者模式的主要优点在于简化了对象之间的交互，将各同事解耦，还可以减少子类生成，对于复杂的对象之间的交互，通过引入中介者，可以简化各同事类的设计和实现；中介者模式主要缺点在于具体中介者类中包含了同事之间的交互细节，可能会导致具体中介者类非常复杂，使得系统难以维护。\n- 中介者模式适用情况包括：系统中对象之间存在复杂的引用关系，产生的相互依赖关系结构混乱且难以理解；一个对象由于引用了其他很多对象并且直接和这些对象通信，导致难以复用该对象；想通过一个中间类来封装多个类中的行为，而又不想生成太多的子类。\n"
  },
  {
    "path": "behavioral_patterns/observer.rst",
    "content": ".. _observer:\n\n观察者模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n建立一种对象与对象之间的依赖关系，一个对象发生改变时将自动通知其他对象，其他对象将相应做出反应。在此，发生改变的对象称为观察目标，而被通知的对象称为观察者，一个观察目标可以对应多个观察者，而且这些观察者之间没有相互联系，可以根据需要增加和删除观察者，使得系统更易于扩展，这就是观察者模式的模式动机。\n\n\n模式定义\n--------------------\n观察者模式(Observer Pattern)：定义对象间的一种一对多依赖关系，使得每当一个对象状态发生改变时，其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅（Publish/Subscribe）模式、模型-视图（Model/View）模式、源-监听器（Source/Listener）模式或从属者（Dependents）模式。\n\n观察者模式是一种对象行为型模式。\n\n\n模式结构\n--------------------\n观察者模式包含如下角色：\n\n- Subject: 目标\n- ConcreteSubject: 具体目标\n- Observer: 观察者\n- ConcreteObserver: 具体观察者\n\n\n.. image:: /_static/Obeserver.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Obeserver.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Obeserver/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 11-23\n\n.. literalinclude:: /code/Obeserver/Subject.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 23-25,31\n\n.. literalinclude:: /code/Obeserver/Subject.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 18-41\n\n.. literalinclude:: /code/Obeserver/Obeserver.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 11\n\n.. literalinclude:: /code/Obeserver/ConcreteObeserver.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Obeserver/ConcreteObeserver.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 22-25\n\n运行结果：\n\n.. image:: /_static/Obeserver_run.jpg\n\n\n模式分析\n--------------------\n- 观察者模式描述了如何建立对象与对象之间的依赖关系，如何构造满足这种需求的系统。\n- 这一模式中的关键对象是观察目标和观察者，一个目标可以有任意数目的与之相依赖的观察者，一旦目标的状态发生改变，所有的观察者都将得到通知。\n- 作为对这个通知的响应，每个观察者都将即时更新自己的状态，以与目标状态同步，这种交互也称为发布-订阅(publishsubscribe)。目标是通知的发布者，它发出通知时并不需要知道谁是它的观察者，可以有任意数目的观察者订阅它并接收通\n知。\n\n\n实例\n--------------------\n\n优点\n--------------------\n观察者模式的优点\n\n- 观察者模式可以实现表示层和数据逻辑层的分离，并定义了稳定的消息更新传递机制，抽象了更新接口，使得可以有各种各样不同的表示层作为具体观察者角色。\n- 观察者模式在观察目标和观察者之间建立一个抽象的耦合。\n- 观察者模式支持广播通信。\n- 观察者模式符合“开闭原则”的要求。\n\n缺点\n--------------------\n观察者模式的缺点\n\n- 如果一个观察目标对象有很多直接和间接的观察者的话，将所有的观察者都通知到会花费很多时间。\n- 如果在观察者和观察目标之间有循环依赖的话，观察目标会触发它们之间进行循环调用，可能导致系统崩溃。\n- 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的，而仅仅只是知道观察目标发生了变化。\n\n\n适用环境\n--------------------\n在以下情况下可以使用观察者模式：\n\n- 一个抽象模型有两个方面，其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。\n- 一个对象的改变将导致其他一个或多个对象也发生改变，而不知道具体有多少对象将发生改变，可以降低对象之间的耦合度。\n- 一个对象必须通知其他对象，而并不知道这些对象是谁。\n- 需要在系统中创建一个触发链，A对象的行为将影响B对象，B对象的行为将影响C对象……，可以使用观察者模式创建一种链式触发机制。\n\n\n模式应用\n--------------------\n观察者模式在软件开发中应用非常广泛，如某电子商务网站可以在执行发送操作后给用户多个发送商品打折信息，某团队战斗游戏中某队友牺牲将给所有成员提示等等，凡是涉及到一对一或者一对多的对象交互场景都可以使用观察者模式。\n\n模式扩展\n--------------------\nMVC模式\n\n- MVC模式是一种架构模式，它包含三个角色：模型(Model)，视图(View)和控制器(Controller)。观察者模式可以用来实现MVC模式，观察者模式中的观察目标就是MVC模式中的模型(Model)，而观察者就是MVC中的视图(View)，控制器(Controller)充当两者之间的中介者(Mediator)。当模型层的数据发生改变时，视图层将自动改变其显示内容。\n\n总结\n--------------------\n- 观察者模式定义对象间的一种一对多依赖关系，使得每当一个对象状态发生改变时，其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。观察者模式是一种对象行为型模式。\n- 观察者模式包含四个角色：目标又称为主题，它是指被观察的对象；具体目标是目标类的子类，通常它包含有经常发生改变的数据，当它的状态发生改变时，向它的各个观察者发出通知；观察者将对观察目标的改变做出反应；在具体观察者中维护一个指向具体目标对象的引用，它存储具体观察者的有关状态，这些状态需要和具体目标的状态保持一致。\n- 观察者模式定义了一种一对多的依赖关系，让多个观察者对象同时监听某一个目标对象，当这个目标对象的状态发生变化时，会通知所有观察者对象，使它们能够自动更新。\n- 观察者模式的主要优点在于可以实现表示层和数据逻辑层的分离，并在观察目标和观察者之间建立一个抽象的耦合，支持广播通信；其主要缺点在于如果一个观察目标对象有很多直接和间接的观察者的话，将所有的观察者都通知到会花费很多时间，而且如果在观察者和观察目标之间有循环依赖的话，观察目标会触发它们之间进行循环调用，可能导致系统崩溃。\n- 观察者模式适用情况包括：一个抽象模型有两个方面，其中一个方面依赖于另一个方面；一个对象的改变将导致其他一个或多个对象也发生改变，而不知道具体有多少对象将发生改变；一个对象必须通知其他对象，而并不知道这些对象是谁；需要在系统中创建一个触发链。\n- 在JDK的java.util包中，提供了Observable类以及Observer接口，它们构成了Java语言对观察者模式的支持。\n"
  },
  {
    "path": "behavioral_patterns/state.rst",
    "content": ".. _state:\n\n状态模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n- 在很多情况下，一个对象的行为取决于一个或多个动态变化的属性，这样的属性叫做状态，这样的对象叫做有状态的(stateful)对象，这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时，其内部状态就会改变，从而使得系统的行为也随之发生变化。\n\n- 在UML中可以使用状态图来描述对象状态的变化。\n\n\n模式定义\n--------------------\n状态模式(State Pattern) ：允许一个对象在其内部状态改变时改变它的行为，对象看起来似乎修改了它的类。其别名为状态对象(Objects for States)，状态模式是一种对象行为型模式。\n\n\n模式结构\n--------------------\n状态模式包含如下角色：\n\n- Context: 环境类\n- State: 抽象状态类\n- ConcreteState: 具体状态类\n\n\n.. image:: /_static/State.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_State.jpg\n\n\n既然是状态模式，加上状态图，对状态转换间的理解会清晰很多：\n\n.. image:: /_static/State1.png\n\n代码分析\n--------------------\n.. literalinclude:: /code/State/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/State/Context.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 20-24\n   \n.. literalinclude:: /code/State/Context.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 19-25\n\n.. literalinclude:: /code/State/ConcreteStateA.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   \n.. literalinclude:: /code/State/ConcreteStateA.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 30-33\n\n\n运行结果：\n\n.. image:: /_static/State_run.jpg\n\n\n模式分析\n--------------------\n- 状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不同的行为。\n- 状态模式的关键是引入了一个抽象类来专门表示对象的状态，这个类我们叫做抽象状态类，而对象的每一种具体状态类都继承了该类，并在不同具体状态类中实现了不同状态的行为，包括各种状态之间的转换。\n\n在状态模式结构中需要理解环境类与抽象状态类的作用：\n\n- 环境类实际上就是拥有状态的对象，环境类有时候可以充当状态管理器(State Manager)的角色，可以在环境类中对状态进行切换操作。\n- 抽象状态类可以是抽象类，也可以是接口，不同状态类就是继承这个父类的不同子类，状态类的产生是由于环境类存在多个状态，同时还满足两个条件： 这些状态经常需要切换，在不同的状态下对象的行为不同。因此可以将不同对象下的行为单独提取出来封装在具体的状态类中，使得环境类对象在其内部状态改变时可以改变它的行为，对象看起来似乎修改了它的类，而实际上是由于切换到不同的具体状态类实现的。由于环境类可以设置为任一具体状态类，因此它针对抽象状态类进行编程，在程序运行时可以将任一具体状态类的对象设置到环境类中，从而使得环境类可以改变内部状态，并且改变行为。\n\n实例\n--------------------\nTCPConnection\n\n这个示例来自《设计模式》,展示了一个简化版的TCP协议实现;\nTCP连接的状态有多种可能，状态之间的转换有相应的逻辑前提；\n这是使用状态模式的场合；\n\n\n状态图：\n\n.. image:: /_static/State2.png\n\n结构图：\n\n.. image:: /_static/State_eg.jpg\n\n\n时序图：\n\n.. image:: /_static/seq_State_eg.jpg\n\n\n优点\n--------------------\n状态模式的优点\n\n- 封装了转换规则。\n- 枚举可能的状态，在枚举状态之前需要确定状态种类。\n- 将所有与某个状态有关的行为放到一个类中，并且可以方便地增加新的状态，只需要改变对象状态即可改变对象的行为。\n- 允许状态转换逻辑与状态对象合成一体，而不是某一个巨大的条件语句块。\n- 可以让多个环境对象共享一个状态对象，从而减少系统中对象的个数。\n\n\n\n缺点\n--------------------\n状态模式的缺点\n\n- 状态模式的使用必然会增加系统类和对象的个数。\n- 状态模式的结构与实现都较为复杂，如果使用不当将导致程序结构和代码的混乱。\n- 状态模式对“开闭原则”的支持并不太好，对于可以切换状态的状态模式，增加新的状态类需要修改那些负责状态转换的源代码，否则无法切换到新增状态；而且修改某个状态类的行为也需修改对应类的源代码。\n\n\n适用环境\n--------------------\n在以下情况下可以使用状态模式：\n\n- 对象的行为依赖于它的状态（属性）并且可以根据它的状态改变而改变它的相关行为。\n- 代码中包含大量与对象状态有关的条件语句，这些条件语句的出现，会导致代码的可维护性和灵活性变差，不能方便地增加和删除状态，使客户类与类库之间的耦合增强。在这些条件语句中包含了对象的行为，而且这些条件对应于对象的各种状态。\n\n\n模式应用\n--------------------\n状态模式在工作流或游戏等类型的软件中得以广泛使用，甚至可以用于这些系统的核心功能设计，如在政府OA办公系统中，一个批文的状态有多种：尚未办理；正在办理；正在批示；正在审核；已经完成等各种状态，而且批文状态不同时对批文的操作也有所差异。使用状态模式可以描述工作流对象（如批文）的状态转换以及不同状态下它所具有的行为。\n\n模式扩展\n--------------------\n共享状态\n\n- 在有些情况下多个环境对象需要共享同一个状态，如果希望在系统中实现多个环境对象实例共享一个或多个状态对象，那么需要将这些状态对象定义为环境的静态成员对象。\n\n\n简单状态模式与可切换状态的状态模式\n    1) 简单状态模式：简单状态模式是指状态都相互独立，状态之间无须进行转换的状态模式，这是最简单的一种状态模式。对于这种状态模式，每个状态类都封装与状态相关的操作，而无须关心状态的切换，可以在客户端直接实例化状态类，然后将状态对象设置到环境类中。如果是这种简单的状态模式，它遵循“开闭原则”，在客户端可以针对抽象状态类进行编程，而将具体状态类写到配置文件中，同时增加新的状态类对原有系统也不造成任何影响。\n    2) 可切换状态的状态模式：大多数的状态模式都是可以切换状态的状态模式，在实现状态切换时，在具体状态类内部需要调用环境类Context的setState()方法进行状态的转换操作，在具体状态类中可以调用到环境类的方法，因此状态类与环境类之间通常还存在关联关系或者依赖关系。通过在状态类中引用环境类的对象来回调环境类的setState()方法实现状态的切换。在这种可以切换状态的状态模式中，增加新的状态类可能需要修改其他某些状态类甚至环境类的源代码，否则系统无法切换到新增状态。\n\n总结\n--------------------\n- 状态模式允许一个对象在其内部状态改变时改变它的行为，对象看起来似乎修改了它的类。其别名为状态对象，状态模式是一种对象行为型模式。\n- 状态模式包含三个角色：环境类又称为上下文类，它是拥有状态的对象，在环境类中维护一个抽象状态类State的实例，这个实例定义当前状态，在具体实现时，它是一个State子类的对象，可以定义初始状态；抽象状态类用于定义一个接口以封装与环境类的一个特定状态相关的行为；具体状态类是抽象状态类的子类，每一个子类实现一个与环境类的一个状态相关的行为，每一个具体状态类对应环境的一个具体状态，不同的具体状态类其行为有所不同。\n- 状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不同的行为。\n- 状态模式的主要优点在于封装了转换规则，并枚举可能的状态，它将所有与某个状态有关的行为放到一个类中，并且可以方便地增加新的状态，只需要改变对象状态即可改变对象的行为，还可以让多个环境对象共享一个状态对象，从而减少系统中对象的个数；其缺点在于使用状态模式会增加系统类和对象的个数，且状态模式的结构与实现都较为复杂，如果使用不当将导致程序结构和代码的混乱，对于可以切换状态的状态模式不满足“开闭原则”的要求。\n- 状态模式适用情况包括：对象的行为依赖于它的状态（属性）并且可以根据它的状态改变而改变它的相关行为；代码中包含大量与对象状态有关的条件语句，这些条件语句的出现，会导致代码的可维护性和灵活性变差，不能方便地增加和删除状态，使客户类与类库之间的耦合增强。\n\n"
  },
  {
    "path": "behavioral_patterns/strategy.rst",
    "content": ".. _strategy:\n\n策略模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n- 完成一项任务，往往可以有多种不同的方式，每一种方式称为一个策略，我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。\n- 在软件开发中也常常遇到类似的情况，实现某一个功能有多个途径，此时可以使用一种设计模式来使得系统可以灵活地选择解决途径，也能够方便地增加新的解决途径。\n- 在软件系统中，有许多算法可以实现某一功能，如查找、排序等，一种常用的方法是硬编码(Hard Coding)在一个类中，如需要提供多种查找算法，可以将这些算法写到一个类中，在该类中提供多个方法，每一个方法对应一个具体的查找算法；当然也可以将这些查找算法封装在一个统一的方法中，通过if…else…等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码，如果需要增加一种新的查找算法，需要修改封装算法类的源代码；更换查找算法，也需要修改客户端调用代码。在这个算法类中封装了大量查找算法，该类代码将较复杂，维护较为困难。\n- 除了提供专门的查找算法类之外，还可以在客户端程序中直接包含算法代码，这种做法更不可取，将导致客户端程序庞大而且难以维护，如果存在大量可供选择的算法时问题将变得更加严重。\n- 为了解决这些问题，可以定义一些独立的类来封装不同的算法，每一个类封装一个具体的算法，在这里，每一个封装算法的类我们都可以称之为策略(Strategy)，为了保证这些策略的一致性，一般会用一个抽象的策略类来做算法的定义，而具体每种算法则对应于一个具体策略类。\n\n\n模式定义\n--------------------\n策略模式(Strategy Pattern)：定义一系列算法，将每一个算法封装起来，并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化，也称为政策模式(Policy)。\n\n策略模式是一种对象行为型模式。\n\n\n模式结构\n--------------------\n策略模式包含如下角色：\n\n- Context: 环境类\n- Strategy: 抽象策略类\n- ConcreteStrategy: 具体策略类\n\n\n.. image:: /_static/Strategy.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Strategy.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Strategy/main.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 10-17\n\n.. literalinclude:: /code/Strategy/Context.h\n   :language: cpp\n   :linenos:\n\n.. literalinclude:: /code/Strategy/Context.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 16-22\n\n.. literalinclude:: /code/Strategy/ConcreteStrategyA.h\n   :language: cpp\n   :linenos:\n\n.. literalinclude:: /code/Strategy/ConcreteStrategyA.cpp\n   :language: cpp\n   :linenos:\n\n运行结果：\n\n.. image:: /_static/Strategy_run.jpg\n\n\n模式分析\n--------------------\n- 策略模式是一个比较容易理解和使用的设计模式，策略模式是对算法的封装，它把算法的责任和算法本身分割开，委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面，作为一个抽象策略类的子类。用一句话来说，就是“准备一组算法，并将每一个算法封装起来，使得它们可以互换”。\n\n- 在策略模式中，应当由客户端自己决定在什么情况下使用什么具体策略角色。\n\n- 策略模式仅仅封装算法，提供新算法插入到已有系统中，以及老算法从系统中“退休”的方便，策略模式并不决定在何时使用何种算法，算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性，但是客户端需要理解所有具体策略类之间的区别，以便选择合适的算法，这也是策略模式的缺点之一，在一定程度上增加了客户端的使用难度。\n\n实例\n--------------------\n\n优点\n--------------------\n策略模式的优点\n\n- 策略模式提供了对“开闭原则”的完美支持，用户可以在不修改原有系统的基础上选择算法或行为，也可以灵活地增加新的算法或行为。\n- 策略模式提供了管理相关的算法族的办法。\n- 策略模式提供了可以替换继承关系的办法。\n- 使用策略模式可以避免使用多重条件转移语句。\n\n\n缺点\n--------------------\n策略模式的缺点\n\n- 客户端必须知道所有的策略类，并自行决定使用哪一个策略类。\n- 策略模式将造成产生很多策略类，可以通过使用享元模式在一定程度上减少对象的数量。\n\n\n适用环境\n--------------------\n在以下情况下可以使用策略模式：\n\n- 如果在一个系统里面有许多类，它们之间的区别仅在于它们的行为，那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。\n- 一个系统需要动态地在几种算法中选择一种。\n- 如果一个对象有很多的行为，如果不用恰当的模式，这些行为就只好使用多重的条件选择语句来实现。\n- 不希望客户端知道复杂的、与算法相关的数据结构，在具体策略类中封装算法和相关的数据结构，提高算法的保密性与安全性。\n\n\n模式应用\n--------------------\n\n模式扩展\n--------------------\n策略模式与状态模式\n\n- 可以通过环境类状态的个数来决定是使用策略模式还是状态模式。\n- 策略模式的环境类自己选择一个具体策略类，具体策略类无须关心环境类；而状态模式的环境类由于外在因素需要放进一个具体状态中，以便通过其方法实现状态的切换，因此环境类和状态类之间存在一种双向的关联关系。\n- 使用策略模式时，客户端需要知道所选的具体策略是哪一个，而使用状态模式时，客户端无须关心具体状态，环境类的状态会根据用户的操作自动转换。\n- 如果系统中某个类的对象存在多种状态，不同状态下行为有差异，而且这些状态之间可以发生转换时使用状态模式；如果系统中某个类的某一行为存在多种实现方式，而且这些实现方式可以互换时使用策略模式。\n\n\n总结\n--------------------\n- 在策略模式中定义了一系列算法，将每一个算法封装起来，并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化，也称为政策模式。策略模式是一种对象行为型模式。\n- 策略模式包含三个角色：环境类在解决某个问题时可以采用多种策略，在环境类中维护一个对抽象策略类的引用实例；抽象策略类为所支持的算法声明了抽象方法，是所有策略类的父类；具体策略类实现了在抽象策略类中定义的算法。\n- 策略模式是对算法的封装，它把算法的责任和算法本身分割开，委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面，作为一个抽象策略类的子类。\n- 策略模式主要优点在于对“开闭原则”的完美支持，在不修改原有系统的基础上可以更换算法或者增加新的算法，它很好地管理算法族，提高了代码的复用性，是一种替换继承，避免多重条件转移语句的实现方式；其缺点在于客户端必须知道所有的策略类，并理解其区别，同时在一定程度上增加了系统中类的个数，可能会存在很多策略类。\n- 策略模式适用情况包括：在一个系统里面有许多类，它们之间的区别仅在于它们的行为，使用策略模式可以动态地让一个对象在许多行为中选择一种行为；一个系统需要动态地在几种算法中选择一种；避免使用难以维护的多重条件选择语句；希望在具体策略类中封装算法和与相关的数据结构。\n\n"
  },
  {
    "path": "code/AbstractFactory/AbstractFactory.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractFactory.cpp\n//  Implementation of the Class AbstractFactory\n//  Created on:      02-十月-2014 15:04:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"AbstractFactory.h\"\n\n\nAbstractFactory::AbstractFactory(){\n\n}\n\n\n\nAbstractFactory::~AbstractFactory(){\n\n}\n"
  },
  {
    "path": "code/AbstractFactory/AbstractFactory.h",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractFactory.h\n//  Implementation of the Class AbstractFactory\n//  Created on:      02-十月-2014 15:04:09\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_B48A03BA_2A60_4d85_B9EF_57DBDEEFE360__INCLUDED_)\n#define EA_B48A03BA_2A60_4d85_B9EF_57DBDEEFE360__INCLUDED_\n#include \"AbstractProductA.h\"\n#include \"AbstractProductB.h\"\n\nclass AbstractFactory\n{\n\npublic:\n\tAbstractFactory();\n\tvirtual ~AbstractFactory();\n\n\tvirtual AbstractProductA * createProductA() = 0;\n\tvirtual AbstractProductB * createProductB() = 0;\n\n};\n#endif // !defined(EA_B48A03BA_2A60_4d85_B9EF_57DBDEEFE360__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/AbstractProductA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractProductA.cpp\n//  Implementation of the Class AbstractProductA\n//  Created on:      02-十月-2014 15:04:14\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"AbstractProductA.h\"\n\n\nAbstractProductA::AbstractProductA(){\n\n}\n\n\n\nAbstractProductA::~AbstractProductA(){\n\n}\n"
  },
  {
    "path": "code/AbstractFactory/AbstractProductA.h",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractProductA.h\n//  Implementation of the Class AbstractProductA\n//  Created on:      02-十月-2014 15:04:14\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_A8C81D97_DDD6_4ee6_8D9A_35E6305ED449__INCLUDED_)\n#define EA_A8C81D97_DDD6_4ee6_8D9A_35E6305ED449__INCLUDED_\n\nclass AbstractProductA\n{\n\npublic:\n\tAbstractProductA();\n\tvirtual ~AbstractProductA();\n\n\tvirtual void use() = 0;\n\n};\n#endif // !defined(EA_A8C81D97_DDD6_4ee6_8D9A_35E6305ED449__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/AbstractProductB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractProductB.cpp\n//  Implementation of the Class AbstractProductB\n//  Created on:      02-十月-2014 15:04:15\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"AbstractProductB.h\"\n\n\nAbstractProductB::AbstractProductB(){\n\n}\n\n\n\nAbstractProductB::~AbstractProductB(){\n\n}\n"
  },
  {
    "path": "code/AbstractFactory/AbstractProductB.h",
    "content": "///////////////////////////////////////////////////////////\n//  AbstractProductB.h\n//  Implementation of the Class AbstractProductB\n//  Created on:      02-十月-2014 15:04:15\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_20F4F7CF_3782_441b_BB79_CC25B8481002__INCLUDED_)\n#define EA_20F4F7CF_3782_441b_BB79_CC25B8481002__INCLUDED_\n\nclass AbstractProductB\n{\n\npublic:\n\tAbstractProductB();\n\tvirtual ~AbstractProductB();\n\n\tvirtual void eat() = 0;\n\n};\n#endif // !defined(EA_20F4F7CF_3782_441b_BB79_CC25B8481002__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ConcreteFactory1.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory1.cpp\n//  Implementation of the Class ConcreteFactory1\n//  Created on:      02-十月-2014 15:04:11\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteFactory1.h\"\n#include \"ProductA1.h\"\n#include \"ProductB1.h\"\n\n\nConcreteFactory1::ConcreteFactory1(){\n\n}\n\nConcreteFactory1::~ConcreteFactory1(){\n\n}\n\nAbstractProductA * ConcreteFactory1::createProductA(){\n\treturn new ProductA1();\n}\n\n\nAbstractProductB * ConcreteFactory1::createProductB(){\n\treturn new ProductB1();\n}"
  },
  {
    "path": "code/AbstractFactory/ConcreteFactory1.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory1.h\n//  Implementation of the Class ConcreteFactory1\n//  Created on:      02-十月-2014 15:04:11\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_A1BE35BD_23B8_4607_8EE7_7BCA32867D8E__INCLUDED_)\n#define EA_A1BE35BD_23B8_4607_8EE7_7BCA32867D8E__INCLUDED_\n\n#include \"AbstractFactory.h\"\n#include \"AbstractProductA.h\"\n#include \"AbstractProductB.h\"\n\n\nclass ConcreteFactory1 : public AbstractFactory\n{\n\npublic:\n\tConcreteFactory1();\n\tvirtual ~ConcreteFactory1();\n\n\tvirtual AbstractProductA * createProductA();\n\tvirtual AbstractProductB * createProductB();\n\n};\n#endif // !defined(EA_A1BE35BD_23B8_4607_8EE7_7BCA32867D8E__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ConcreteFactory2.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory2.cpp\n//  Implementation of the Class ConcreteFactory2\n//  Created on:      02-十月-2014 15:04:13\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteFactory2.h\"\n#include \"ProductA2.h\"\n#include \"ProductB2.h\"\n\nConcreteFactory2::ConcreteFactory2(){\n\n}\n\nConcreteFactory2::~ConcreteFactory2(){\n\n}\n\n\nAbstractProductA * ConcreteFactory2::createProductA(){\n\treturn new ProductA2();\n}\n\n\nAbstractProductB * ConcreteFactory2::createProductB(){\n\treturn new ProductB2();\n}\n\n"
  },
  {
    "path": "code/AbstractFactory/ConcreteFactory2.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory2.h\n//  Implementation of the Class ConcreteFactory2\n//  Created on:      02-十月-2014 15:04:13\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_E8105A80_B2A3_4ec2_821E_1061C896A888__INCLUDED_)\n#define EA_E8105A80_B2A3_4ec2_821E_1061C896A888__INCLUDED_\n\n#include \"AbstractFactory.h\"\n#include \"AbstractProductA.h\"\n#include \"AbstractProductB.h\"\n\nclass ConcreteFactory2 : public AbstractFactory\n{\n\npublic:\n\tConcreteFactory2();\n\tvirtual ~ConcreteFactory2();\n\n\tvirtual AbstractProductA * createProductA();\n\tvirtual AbstractProductB * createProductB();\n\n};\n#endif // !defined(EA_E8105A80_B2A3_4ec2_821E_1061C896A888__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ProductA1.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ProductA1.cpp\n//  Implementation of the Class ProductA1\n//  Created on:      02-十月-2014 15:04:17\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ProductA1.h\"\n#include <iostream>\nusing namespace std;\n\n\nProductA1::ProductA1(){\n\n}\n\nProductA1::~ProductA1(){\n\n}\n\nvoid ProductA1::use(){\n\tcout << \"use Product A1\" << endl;\n}"
  },
  {
    "path": "code/AbstractFactory/ProductA1.h",
    "content": "///////////////////////////////////////////////////////////\n//  ProductA1.h\n//  Implementation of the Class ProductA1\n//  Created on:      02-十月-2014 15:04:16\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_A2B201B2_C47D_41bd_9B53_C404C047CB78__INCLUDED_)\n#define EA_A2B201B2_C47D_41bd_9B53_C404C047CB78__INCLUDED_\n\n#include \"AbstractProductA.h\"\n\nclass ProductA1 : public AbstractProductA\n{\n\npublic:\n\tProductA1();\n\tvirtual ~ProductA1();\n\n\tvoid use();\n\n};\n#endif // !defined(EA_A2B201B2_C47D_41bd_9B53_C404C047CB78__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ProductA2.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ProductA2.cpp\n//  Implementation of the Class ProductA2\n//  Created on:      02-十月-2014 15:04:18\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ProductA2.h\"\n#include <iostream>\nusing namespace std;\n\n\nProductA2::ProductA2(){\n\n}\n\n\n\nProductA2::~ProductA2(){\n\n}\n\n\nvoid ProductA2::use(){\n\tcout << \"use Product A2\" << endl;\n}"
  },
  {
    "path": "code/AbstractFactory/ProductA2.h",
    "content": "///////////////////////////////////////////////////////////\n//  ProductA2.h\n//  Implementation of the Class ProductA2\n//  Created on:      02-十月-2014 15:04:18\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_FA4DE366_9B79_4c87_B2A6_197B4713DFB1__INCLUDED_)\n#define EA_FA4DE366_9B79_4c87_B2A6_197B4713DFB1__INCLUDED_\n\n#include \"AbstractProductA.h\"\n\nclass ProductA2 : public AbstractProductA\n{\n\npublic:\n\tProductA2();\n\tvirtual ~ProductA2();\n\n\tvoid use();\n\n};\n#endif // !defined(EA_FA4DE366_9B79_4c87_B2A6_197B4713DFB1__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ProductB1.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ProductB1.cpp\n//  Implementation of the Class ProductB1\n//  Created on:      02-十月-2014 15:04:19\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ProductB1.h\"\n#include <iostream>\nusing namespace std;\n\n\nProductB1::ProductB1(){\n\n}\n\n\n\nProductB1::~ProductB1(){\n\n}\n\nvoid ProductB1::eat(){\n\tcout << \"eat Product B1\" << endl;\n}"
  },
  {
    "path": "code/AbstractFactory/ProductB1.h",
    "content": "///////////////////////////////////////////////////////////\n//  ProductB1.h\n//  Implementation of the Class ProductB1\n//  Created on:      02-十月-2014 15:04:19\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_CAAE93FF_EC03_413c_A931_0528F68AA18A__INCLUDED_)\n#define EA_CAAE93FF_EC03_413c_A931_0528F68AA18A__INCLUDED_\n\n#include \"AbstractProductB.h\"\n\nclass ProductB1 : public AbstractProductB\n{\n\npublic:\n\tProductB1();\n\tvirtual ~ProductB1();\n\n\tvoid eat();\n\n};\n#endif // !defined(EA_CAAE93FF_EC03_413c_A931_0528F68AA18A__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/ProductB2.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ProductB2.cpp\n//  Implementation of the Class ProductB2\n//  Created on:      02-十月-2014 15:04:20\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ProductB2.h\"\n#include <iostream>\nusing namespace std;\n\n\n\nProductB2::ProductB2(){\n\n}\n\n\n\nProductB2::~ProductB2(){\n\n}\n\nvoid ProductB2::eat(){\n\tcout << \"eat Product B2\" << endl;\n}"
  },
  {
    "path": "code/AbstractFactory/ProductB2.h",
    "content": "///////////////////////////////////////////////////////////\n//  ProductB2.h\n//  Implementation of the Class ProductB2\n//  Created on:      02-十月-2014 15:04:20\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_D451967B_37E0_4776_9D7A_85DD6DC72821__INCLUDED_)\n#define EA_D451967B_37E0_4776_9D7A_85DD6DC72821__INCLUDED_\n\n#include \"AbstractProductB.h\"\n\nclass ProductB2 : public AbstractProductB\n{\n\npublic:\n\tProductB2();\n\tvirtual ~ProductB2();\n\n\tvoid eat();\n\n};\n#endif // !defined(EA_D451967B_37E0_4776_9D7A_85DD6DC72821__INCLUDED_)\n"
  },
  {
    "path": "code/AbstractFactory/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>AbstractFactory.cpp</File>\n\t<File>AbstractFactory.h</File>\n\t<File>AbstractProductA.cpp</File>\n\t<File>AbstractProductA.h</File>\n\t<File>AbstractProductB.cpp</File>\n\t<File>AbstractProductB.h</File>\n\t<File>ConcreteFactory1.cpp</File>\n\t<File>ConcreteFactory1.h</File>\n\t<File>ConcreteFactory2.cpp</File>\n\t<File>ConcreteFactory2.h</File>\n\t<File>ProductA1.cpp</File>\n\t<File>ProductA1.h</File>\n\t<File>ProductA2.cpp</File>\n\t<File>ProductA2.h</File>\n\t<File>ProductB1.cpp</File>\n\t<File>ProductB1.h</File>\n\t<File>ProductB2.cpp</File>\n\t<File>ProductB2.h</File>\n<Attribute topline=\"4\" x=\"7\" y=\"15\">main.cpp</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"20\">AbstractFactory.cpp</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"12\">AbstractFactory.h</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"20\">AbstractProductA.cpp</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"17\">AbstractProductA.h</Attribute>\n<Attribute topline=\"16\" x=\"1\" y=\"20\">AbstractProductB.cpp</Attribute>\n<Attribute topline=\"1\" x=\"25\" y=\"18\">AbstractProductB.h</Attribute>\n<Attribute topline=\"10\" x=\"1\" y=\"11\">ConcreteFactory1.cpp</Attribute>\n<Attribute topline=\"10\" x=\"43\" y=\"23\">ConcreteFactory1.h</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"15\">ConcreteFactory2.cpp</Attribute>\n<Attribute topline=\"7\" x=\"26\" y=\"22\">ConcreteFactory2.h</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"16\">ProductA1.cpp</Attribute>\n<Attribute topline=\"10\" x=\"1\" y=\"24\">ProductA1.h</Attribute>\n<Attribute topline=\"16\" x=\"1\" y=\"17\">ProductA2.cpp</Attribute>\n<Attribute topline=\"16\" x=\"1\" y=\"22\">ProductB1.cpp</Attribute>\n<Attribute topline=\"1\" x=\"2\" y=\"26\">ProductB2.cpp</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/AbstractFactory/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/AbstractFactory/main.cpp",
    "content": "#include <iostream>\n#include \"AbstractFactory.h\"\n#include \"AbstractProductA.h\"\n#include \"AbstractProductB.h\"\n#include \"ConcreteFactory1.h\"\n#include \"ConcreteFactory2.h\"\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tAbstractFactory * fc = new ConcreteFactory1();\n\tAbstractProductA * pa =  fc->createProductA();\n\tAbstractProductB * pb = fc->createProductB();\n\tpa->use();\n\tpb->eat();\n\t\n\tAbstractFactory * fc2 = new ConcreteFactory2();\n\tAbstractProductA * pa2 =  fc2->createProductA();\n\tAbstractProductB * pb2 = fc2->createProductB();\n\tpa2->use();\n\tpb2->eat();\n\t\n\tdelete fc;\n\tdelete pa;\n\tdelete pb;\n\tdelete fc2;\n\tdelete pa2;\n\tdelete pb2;\t\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Adapter/Adaptee.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Adaptee.cpp\n//  Implementation of the Class Adaptee\n//  Created on:      03-十月-2014 17:32:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Adaptee.h\"\n#include <iostream>\nusing namespace std;\n\nAdaptee::Adaptee(){\n\n}\n\nAdaptee::~Adaptee(){\n\n}\n\nvoid Adaptee::specificRequest(){\n\tcout << \"specificRequest()|this is real Request from Adaptee!\" << endl;\n}"
  },
  {
    "path": "code/Adapter/Adaptee.h",
    "content": "///////////////////////////////////////////////////////////\n//  Adaptee.h\n//  Implementation of the Class Adaptee\n//  Created on:      03-十月-2014 17:32:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_)\n#define EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_\n\nclass Adaptee\n{\n\npublic:\n\tAdaptee();\n\tvirtual ~Adaptee();\n\n\tvoid specificRequest();\n\n};\n#endif // !defined(EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_)\n"
  },
  {
    "path": "code/Adapter/Adapter.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Adapter.cpp\n//  Implementation of the Class Adapter\n//  Created on:      03-十月-2014 17:32:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Adapter.h\"\n\nAdapter::Adapter(Adaptee * adaptee){\n\tm_pAdaptee =  adaptee;\n}\n\nAdapter::~Adapter(){\n\n}\n\nvoid Adapter::request(){\n\tm_pAdaptee->specificRequest();\n}"
  },
  {
    "path": "code/Adapter/Adapter.h",
    "content": "///////////////////////////////////////////////////////////\n//  Adapter.h\n//  Implementation of the Class Adapter\n//  Created on:      03-十月-2014 17:32:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_)\n#define EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_\n\n#include \"Target.h\"\n#include \"Adaptee.h\"\n\nclass Adapter : public Target\n{\n\npublic:\n\tAdapter(Adaptee *adaptee);\n\tvirtual ~Adapter();\n\n\tvirtual void request();\n\nprivate:\n\tAdaptee* m_pAdaptee;\n\n};\n#endif // !defined(EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_)\n"
  },
  {
    "path": "code/Adapter/Client.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Client.cpp\n//  Implementation of the Class Client\n//  Created on:      03-十月-2014 17:32:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Client.h\"\n\n\nClient::Client(){\n\n}\n\n\n\nClient::~Client(){\n\n}"
  },
  {
    "path": "code/Adapter/Client.h",
    "content": "///////////////////////////////////////////////////////////\n//  Client.h\n//  Implementation of the Class Client\n//  Created on:      03-十月-2014 17:32:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_E8E0A9E0_55D9_4f95_81DE_7D51BC6C4087__INCLUDED_)\n#define EA_E8E0A9E0_55D9_4f95_81DE_7D51BC6C4087__INCLUDED_\n\nclass Client\n{\n\npublic:\n\tClient();\n\tvirtual ~Client();\n\n};\n#endif // !defined(EA_E8E0A9E0_55D9_4f95_81DE_7D51BC6C4087__INCLUDED_)\n"
  },
  {
    "path": "code/Adapter/Target.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Target.cpp\n//  Implementation of the Class Target\n//  Created on:      03-十月-2014 17:32:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Target.h\"\n#include <iostream>\nusing namespace std;\n\n\nTarget::Target(){\n\n}\n\n\n\nTarget::~Target(){\n\n}\n\n\n\n\n\nvoid Target::request(){\n\tcout << \"this is original request \" << endl;\n}"
  },
  {
    "path": "code/Adapter/Target.h",
    "content": "///////////////////////////////////////////////////////////\n//  Target.h\n//  Implementation of the Class Target\n//  Created on:      03-十月-2014 17:32:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_F694149D_AE3C_4295_962B_85E6916C402F__INCLUDED_)\n#define EA_F694149D_AE3C_4295_962B_85E6916C402F__INCLUDED_\n\nclass Target\n{\n\npublic:\n\tTarget();\n\tvirtual ~Target();\n\n\tvirtual void request();\n\n};\n#endif // !defined(EA_F694149D_AE3C_4295_962B_85E6916C402F__INCLUDED_)\n"
  },
  {
    "path": "code/Adapter/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Adaptee.cpp</File>\n\t<File>Adaptee.h</File>\n\t<File>Adapter.cpp</File>\n\t<File>Adapter.h</File>\n\t<File>Target.cpp</File>\n\t<File>Target.h</File>\n<Attribute topline=\"1\" x=\"37\" y=\"10\">main.cpp</Attribute>\n<Attribute topline=\"1\" x=\"17\" y=\"12\">Adaptee.cpp</Attribute>\n<Attribute topline=\"4\" x=\"25\" y=\"18\">Adaptee.h</Attribute>\n<Attribute topline=\"16\" x=\"2\" y=\"20\">Adapter.cpp</Attribute>\n<Attribute topline=\"10\" x=\"21\" y=\"12\">Adapter.h</Attribute>\n<Attribute topline=\"1\" x=\"21\" y=\"10\">Target.cpp</Attribute>\n<Attribute topline=\"1\" x=\"25\" y=\"18\">Target.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Adapter/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Adapter/main.cpp",
    "content": "#include <iostream>\n#include \"Adapter.h\"\n#include \"Adaptee.h\"\n#include \"Target.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tAdaptee * adaptee  = new Adaptee();\n\tTarget * tar = new Adapter(adaptee);\n\ttar->request();\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Bridge/Abstraction.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Abstraction.cpp\n//  Implementation of the Class Abstraction\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Abstraction.h\"\n\n\nAbstraction::Abstraction(){\n\n}\n\n\n\nAbstraction::~Abstraction(){\n\tdelete m_pImp;\n}\n\n\n\n\n\nAbstraction::Abstraction(Implementor* imp){\n\tm_pImp = imp;\n}\n\n\nvoid Abstraction::operation(){\n\n}"
  },
  {
    "path": "code/Bridge/Abstraction.h",
    "content": "///////////////////////////////////////////////////////////\n//  Abstraction.h\n//  Implementation of the Class Abstraction\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_E8BB74E1_58E2_463e_B8EE_5EC7E8E218B0__INCLUDED_)\n#define EA_E8BB74E1_58E2_463e_B8EE_5EC7E8E218B0__INCLUDED_\n\n#include \"Implementor.h\"\n\nclass Abstraction\n{\n\npublic:\n\tAbstraction();\n\tvirtual ~Abstraction();\n\n\tAbstraction(Implementor* imp);\n\tvirtual void operation();\n\nprotected:\n\tImplementor* m_pImp;\n\n};\n#endif // !defined(EA_E8BB74E1_58E2_463e_B8EE_5EC7E8E218B0__INCLUDED_)\n"
  },
  {
    "path": "code/Bridge/ConcreteImplementorA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteImplementorA.cpp\n//  Implementation of the Class ConcreteImplementorA\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteImplementorA.h\"\n#include <iostream>\nusing namespace std;\n\nConcreteImplementorA::ConcreteImplementorA(){\n\n}\n\n\n\nConcreteImplementorA::~ConcreteImplementorA(){\n\n}\n\n\n\n\n\nvoid ConcreteImplementorA::operationImp(){\n\tcout << \"imp in ConcreteImplementorA style.\" << endl;\n}"
  },
  {
    "path": "code/Bridge/ConcreteImplementorA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteImplementorA.h\n//  Implementation of the Class ConcreteImplementorA\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_77F5D11B_99CE_4c63_9971_9226E73FCBD1__INCLUDED_)\n#define EA_77F5D11B_99CE_4c63_9971_9226E73FCBD1__INCLUDED_\n\n#include \"Implementor.h\"\n\nclass ConcreteImplementorA : public Implementor\n{\n\npublic:\n\tConcreteImplementorA();\n\tvirtual ~ConcreteImplementorA();\n\n\tvirtual void operationImp();\n\n};\n#endif // !defined(EA_77F5D11B_99CE_4c63_9971_9226E73FCBD1__INCLUDED_)\n"
  },
  {
    "path": "code/Bridge/ConcreteImplementorB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteImplementorB.cpp\n//  Implementation of the Class ConcreteImplementorB\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteImplementorB.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteImplementorB::ConcreteImplementorB(){\n\n}\n\n\n\nConcreteImplementorB::~ConcreteImplementorB(){\n\n}\n\n\n\n\n\nvoid ConcreteImplementorB::operationImp(){\n\tcout << \"imp in ConcreteImplementorB style.\" << endl;\n}"
  },
  {
    "path": "code/Bridge/ConcreteImplementorB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteImplementorB.h\n//  Implementation of the Class ConcreteImplementorB\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_ED81E431_10B1_41f3_A4D6_037143E5773B__INCLUDED_)\n#define EA_ED81E431_10B1_41f3_A4D6_037143E5773B__INCLUDED_\n\n#include \"Implementor.h\"\n\nclass ConcreteImplementorB : public Implementor\n{\n\npublic:\n\tConcreteImplementorB();\n\tvirtual ~ConcreteImplementorB();\n\n\tvirtual void operationImp();\n\n};\n#endif // !defined(EA_ED81E431_10B1_41f3_A4D6_037143E5773B__INCLUDED_)\n"
  },
  {
    "path": "code/Bridge/Implementor.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Implementor.cpp\n//  Implementation of the Class Implementor\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Implementor.h\"\n\n\nImplementor::Implementor(){\n\n}\n\n\n\nImplementor::~Implementor(){\n\n}\n\n\n\n\n\nvoid Implementor::operationImp(){\n\n}"
  },
  {
    "path": "code/Bridge/Implementor.h",
    "content": "///////////////////////////////////////////////////////////\n//  Implementor.h\n//  Implementation of the Class Implementor\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_DBC56CB0_0310_476d_A44C_C159323E3181__INCLUDED_)\n#define EA_DBC56CB0_0310_476d_A44C_C159323E3181__INCLUDED_\n\nclass Implementor\n{\n\npublic:\n\tImplementor();\n\tvirtual ~Implementor();\n\n\tvirtual void operationImp();\n\n};\n#endif // !defined(EA_DBC56CB0_0310_476d_A44C_C159323E3181__INCLUDED_)\n"
  },
  {
    "path": "code/Bridge/RefinedAbstraction.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  RefinedAbstraction.cpp\n//  Implementation of the Class RefinedAbstraction\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"RefinedAbstraction.h\"\n#include <iostream>\nusing namespace std;\n\n\nRefinedAbstraction::RefinedAbstraction(){\n\n}\n\nRefinedAbstraction::RefinedAbstraction(Implementor* imp)\n\t:Abstraction(imp)\n{\n}\n\nRefinedAbstraction::~RefinedAbstraction(){\n\n}\n\nvoid RefinedAbstraction::operation(){\n\tcout << \"do something else ,and then \" << endl;\n\tm_pImp->operationImp();\n}\n\n "
  },
  {
    "path": "code/Bridge/RefinedAbstraction.h",
    "content": "///////////////////////////////////////////////////////////\n//  RefinedAbstraction.h\n//  Implementation of the Class RefinedAbstraction\n//  Created on:      03-十月-2014 18:12:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_)\n#define EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_\n\n#include \"Abstraction.h\"\n\nclass RefinedAbstraction : public Abstraction\n{\n\npublic:\n\tRefinedAbstraction();\n\tRefinedAbstraction(Implementor* imp);\n\tvirtual ~RefinedAbstraction();\n\n\tvirtual void operation();\n\n};\n#endif // !defined(EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_)\n"
  },
  {
    "path": "code/Bridge/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Abstraction.cpp</File>\n\t<File>Abstraction.h</File>\n\t<File>ConcreteImplementorA.cpp</File>\n\t<File>ConcreteImplementorA.h</File>\n\t<File>ConcreteImplementorB.cpp</File>\n\t<File>ConcreteImplementorB.h</File>\n\t<File>Implementor.cpp</File>\n\t<File>Implementor.h</File>\n\t<File>RefinedAbstraction.cpp</File>\n\t<File>RefinedAbstraction.h</File>\n<Attribute topline=\"4\" x=\"2\" y=\"15\">main.cpp</Attribute>\n<Attribute topline=\"13\" x=\"17\" y=\"30\">Abstraction.cpp</Attribute>\n<Attribute topline=\"4\" x=\"1\" y=\"22\">Abstraction.h</Attribute>\n<Attribute topline=\"4\" x=\"1\" y=\"27\">ConcreteImplementorA.cpp</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"1\">ConcreteImplementorA.h</Attribute>\n<Attribute topline=\"16\" x=\"1\" y=\"26\">ConcreteImplementorB.cpp</Attribute>\n<Attribute topline=\"1\" x=\"18\" y=\"11\">Implementor.h</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"25\">RefinedAbstraction.cpp</Attribute>\n<Attribute topline=\"10\" x=\"3\" y=\"23\">RefinedAbstraction.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Bridge/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Bridge/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteImplementorA.h\"\n#include \"ConcreteImplementorB.h\"\n#include \"RefinedAbstraction.h\"\n#include \"Abstraction.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\t\n\tImplementor * pImp = new ConcreteImplementorA();\n\tAbstraction * pa = new RefinedAbstraction(pImp);\n\tpa->operation();\n\t\n\tAbstraction * pb = new RefinedAbstraction(new ConcreteImplementorB());\n\tpb->operation();\t\t\n\t\n\tdelete pa;\n\tdelete pb;\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Builder/Builder.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Builder.cpp\n//  Implementation of the Class Builder\n//  Created on:      02-十月-2014 15:57:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Builder.h\"\n\n\nBuilder::Builder(){\n\tm_prod = new Product();\n}\n\n\n\nBuilder::~Builder(){\n\n}\n\n\n\n\n\nvoid Builder::buildPartA(){\n\n}\n\n\nvoid Builder::buildPartB(){\n\n}\n\n\nvoid Builder::buildPartC(){\n\n}\n\n\nProduct* Builder::getResult(){\n\treturn m_prod;\n}"
  },
  {
    "path": "code/Builder/Builder.h",
    "content": "///////////////////////////////////////////////////////////\n//  Builder.h\n//  Implementation of the Class Builder\n//  Created on:      02-十月-2014 15:57:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_938F1725_29F0_4174_93A3_D49DAB5D16A0__INCLUDED_)\n#define EA_938F1725_29F0_4174_93A3_D49DAB5D16A0__INCLUDED_\n#include \"Product.h\"\n\nclass Builder\n{\n\npublic:\n\tBuilder();\n\tvirtual ~Builder();\n\n\tvirtual void buildPartA();\n\tvirtual void buildPartB();\n\tvirtual void buildPartC();\n\tvirtual Product * getResult();\nprotected :\n\tProduct * m_prod;\n};\n#endif // !defined(EA_938F1725_29F0_4174_93A3_D49DAB5D16A0__INCLUDED_)\n"
  },
  {
    "path": "code/Builder/ConcreteBuilder.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteBuilder.cpp\n//  Implementation of the Class ConcreteBuilder\n//  Created on:      02-十月-2014 15:57:03\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteBuilder.h\"\n\n\nConcreteBuilder::ConcreteBuilder(){\n\n}\n\n\n\nConcreteBuilder::~ConcreteBuilder(){\n\n}\n\nvoid ConcreteBuilder::buildPartA(){\n\tm_prod->setA(\"A Style \"); //不同的建造者，可以实现不同产品的建造  \n}\n\n\nvoid ConcreteBuilder::buildPartB(){\n\tm_prod->setB(\"B Style \");\n}\n\n\nvoid ConcreteBuilder::buildPartC(){\n\tm_prod->setC(\"C style \");\n}"
  },
  {
    "path": "code/Builder/ConcreteBuilder.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteBuilder.h\n//  Implementation of the Class ConcreteBuilder\n//  Created on:      02-十月-2014 15:57:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_8FD38521_8504_468b_A6E5_D23DE3F1E1F1__INCLUDED_)\n#define EA_8FD38521_8504_468b_A6E5_D23DE3F1E1F1__INCLUDED_\n\n#include \"Builder.h\"\n\nclass ConcreteBuilder : public Builder\n{\n\npublic:\n\tConcreteBuilder();\n\tvirtual ~ConcreteBuilder();\n\n\tvirtual void buildPartA();\n\tvirtual void buildPartB();\n\tvirtual void buildPartC();\n\n};\n#endif // !defined(EA_8FD38521_8504_468b_A6E5_D23DE3F1E1F1__INCLUDED_)\n"
  },
  {
    "path": "code/Builder/Director.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Director.cpp\n//  Implementation of the Class Director\n//  Created on:      02-十月-2014 15:57:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Director.h\"\n\nDirector::Director(){\n}\n\nDirector::~Director(){\n}\n\nProduct* Director::constuct(){\n\tm_pbuilder->buildPartA();\n\tm_pbuilder->buildPartB();\n\tm_pbuilder->buildPartC();\n\t\n\treturn m_pbuilder->getResult();\n}\n\n\nvoid Director::setBuilder(Builder* buider){\n\tm_pbuilder = buider;\n}"
  },
  {
    "path": "code/Builder/Director.h",
    "content": "///////////////////////////////////////////////////////////\n//  Director.h\n//  Implementation of the Class Director\n//  Created on:      02-十月-2014 15:57:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_211CC7ED_6EAC_41b3_9A9B_BB97BCCF0D14__INCLUDED_)\n#define EA_211CC7ED_6EAC_41b3_9A9B_BB97BCCF0D14__INCLUDED_\n\n#include \"Builder.h\"\n\nclass Director\n{\n\npublic:\n\tDirector();\n\tvirtual ~Director();\n\tBuilder *m_Builder;\n\n\tProduct* constuct();\n\tvoid setBuilder(Builder* buider);\n\nprivate:\n\tBuilder * m_pbuilder;\n\n};\n#endif // !defined(EA_211CC7ED_6EAC_41b3_9A9B_BB97BCCF0D14__INCLUDED_)\n"
  },
  {
    "path": "code/Builder/Product.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Product.cpp\n//  Implementation of the Class Product\n//  Created on:      02-十月-2014 15:57:04\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Product.h\"\n#include <iostream>\nusing namespace std;\n\nProduct::Product(){\n\n}\n\n\n\nProduct::~Product(){\n\n}\n\nvoid Product::setA(string str)\n{\n\tm_a = str;\n}\n\nvoid Product::setB(string str)\n{\n\tm_b = str;\n}\n\nvoid Product::setC(string str)\n{\n\tm_c = str;\n}\n\nvoid Product::show()\n{\n\tcout << \"product has\" << m_a << m_b << m_c << endl;\n}"
  },
  {
    "path": "code/Builder/Product.h",
    "content": "///////////////////////////////////////////////////////////\n//  Product.h\n//  Implementation of the Class Product\n//  Created on:      02-十月-2014 15:57:04\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_8B945DE2_C5A7_4959_A62A_0055346B957E__INCLUDED_)\n#define EA_8B945DE2_C5A7_4959_A62A_0055346B957E__INCLUDED_\n#include <iostream>\nusing namespace std;\n\nclass Product\n{\n\npublic:\n\tProduct();\n\tvirtual ~Product();\n\t\n\tvoid setA(string str);\n\tvoid setB(string str);\n\tvoid setC(string str);\n\tvoid show();\nprivate:\n\tstring m_a;\n\tstring m_b;\n\tstring m_c;\n};\n#endif // !defined(EA_8B945DE2_C5A7_4959_A62A_0055346B957E__INCLUDED_)\n"
  },
  {
    "path": "code/Builder/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Builder.cpp</File>\n\t<File>Builder.h</File>\n\t<File>ConcreteBuilder.cpp</File>\n\t<File>ConcreteBuilder.h</File>\n\t<File>Director.cpp</File>\n\t<File>Director.h</File>\n\t<File>Product.cpp</File>\n\t<File>Product.h</File>\n<Attribute topline=\"1\" x=\"13\" y=\"15\">main.cpp</Attribute>\n<Attribute topline=\"33\" x=\"2\" y=\"42\">Builder.cpp</Attribute>\n<Attribute topline=\"10\" x=\"3\" y=\"25\">Builder.h</Attribute>\n<Attribute topline=\"16\" x=\"33\" y=\"11\">ConcreteBuilder.cpp</Attribute>\n<Attribute topline=\"7\" x=\"28\" y=\"22\">ConcreteBuilder.h</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"23\">Director.cpp</Attribute>\n<Attribute topline=\"10\" x=\"14\" y=\"25\">Director.h</Attribute>\n<Attribute topline=\"22\" x=\"2\" y=\"40\">Product.cpp</Attribute>\n<Attribute topline=\"10\" x=\"11\" y=\"23\">Product.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Builder/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Builder/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteBuilder.h\"\n#include \"Director.h\"\n#include \"Builder.h\"\n#include \"Product.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tConcreteBuilder * builder = new ConcreteBuilder();\n\tDirector  director;\n\tdirector.setBuilder(builder);\n\tProduct * pd =  director.constuct();\n\tpd->show();\n\t\n\tdelete builder;\n\tdelete pd;\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Command/Command.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Command.cpp\n//  Implementation of the Class Command\n//  Created on:      07-十月-2014 17:44:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Command.h\"\n\n\nCommand::Command(){\n\n}\n\n\n\nCommand::~Command(){\n\n}\n\n\n\n\n\nvoid Command::execute(){\n\n}"
  },
  {
    "path": "code/Command/Command.h",
    "content": "///////////////////////////////////////////////////////////\n//  Command.h\n//  Implementation of the Class Command\n//  Created on:      07-十月-2014 17:44:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_DC004DA4_1FE9_4d5b_828F_6163F90CBEB9__INCLUDED_)\n#define EA_DC004DA4_1FE9_4d5b_828F_6163F90CBEB9__INCLUDED_\n\nclass Command\n{\n\npublic:\n\tCommand();\n\tvirtual ~Command();\n\n\tvirtual void execute();\n\n};\n#endif // !defined(EA_DC004DA4_1FE9_4d5b_828F_6163F90CBEB9__INCLUDED_)\n"
  },
  {
    "path": "code/Command/ConcreteCommand.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteCommand.cpp\n//  Implementation of the Class ConcreteCommand\n//  Created on:      07-十月-2014 17:44:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteCommand.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteCommand::ConcreteCommand(Receiver *pReceiver){\n\tm_pReceiver = pReceiver;\n}\n\n\n\nConcreteCommand::~ConcreteCommand(){\n\n}\n\nvoid ConcreteCommand::execute(){\n\tcout << \"ConcreteCommand::execute\"  << endl;\n\tm_pReceiver->action();\n}"
  },
  {
    "path": "code/Command/ConcreteCommand.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteCommand.h\n//  Implementation of the Class ConcreteCommand\n//  Created on:      07-十月-2014 17:44:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_1AE70D53_4868_4e81_A1B8_1088DA355C23__INCLUDED_)\n#define EA_1AE70D53_4868_4e81_A1B8_1088DA355C23__INCLUDED_\n\n#include \"Command.h\"\n#include \"Receiver.h\"\n\nclass ConcreteCommand : public Command\n{\n\npublic:\n\tConcreteCommand(Receiver * pReceiver);\n\tvirtual ~ConcreteCommand();\n\tvirtual void execute();\nprivate:\n\tReceiver *m_pReceiver;\n\n\n\n};\n#endif // !defined(EA_1AE70D53_4868_4e81_A1B8_1088DA355C23__INCLUDED_)\n"
  },
  {
    "path": "code/Command/Invoker.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Invoker.cpp\n//  Implementation of the Class Invoker\n//  Created on:      07-十月-2014 17:44:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Invoker.h\"\n#include <iostream>\nusing namespace std;\n\nInvoker::Invoker(Command * pCommand){\n\tm_pCommand = pCommand;\n}\n\nInvoker::~Invoker(){\n\n}\n\nvoid Invoker::call(){\n\tcout << \"invoker calling\" << endl;\n\tm_pCommand->execute();\n}"
  },
  {
    "path": "code/Command/Invoker.h",
    "content": "///////////////////////////////////////////////////////////\n//  Invoker.h\n//  Implementation of the Class Invoker\n//  Created on:      07-十月-2014 17:44:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_3DACB62A_0813_4d11_8A82_10BF1FB00D9A__INCLUDED_)\n#define EA_3DACB62A_0813_4d11_8A82_10BF1FB00D9A__INCLUDED_\n\n#include \"Command.h\"\n\nclass Invoker\n{\n\npublic:\n\tInvoker(Command * pCommand);\n\tvirtual ~Invoker();\n\tvoid call();\n\nprivate:\n\tCommand *m_pCommand;\n\n\n};\n#endif // !defined(EA_3DACB62A_0813_4d11_8A82_10BF1FB00D9A__INCLUDED_)\n"
  },
  {
    "path": "code/Command/Receiver.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Receiver.cpp\n//  Implementation of the Class Receiver\n//  Created on:      07-十月-2014 17:44:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Receiver.h\"\n#include <iostream>\nusing namespace std;\n\nReceiver::Receiver(){\n\n}\n\nReceiver::~Receiver(){\n\n}\n\nvoid Receiver::action(){\n\tcout << \"receiver action.\" << endl;\n}"
  },
  {
    "path": "code/Command/Receiver.h",
    "content": "///////////////////////////////////////////////////////////\n//  Receiver.h\n//  Implementation of the Class Receiver\n//  Created on:      07-十月-2014 17:44:02\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_8E5430BB_0904_4a7d_9A3B_7169586237C8__INCLUDED_)\n#define EA_8E5430BB_0904_4a7d_9A3B_7169586237C8__INCLUDED_\n\nclass Receiver\n{\n\npublic:\n\tReceiver();\n\tvirtual ~Receiver();\n\n\tvoid action();\n\n};\n#endif // !defined(EA_8E5430BB_0904_4a7d_9A3B_7169586237C8__INCLUDED_)\n"
  },
  {
    "path": "code/Command/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Command.cpp</File>\n\t<File>Command.h</File>\n\t<File>ConcreteCommand.cpp</File>\n\t<File>ConcreteCommand.h</File>\n\t<File>Invoker.cpp</File>\n\t<File>Invoker.h</File>\n\t<File>Receiver.cpp</File>\n\t<File>Receiver.h</File>\n<Attribute topline=\"1\" x=\"37\" y=\"10\">main.cpp</Attribute>\n<Attribute topline=\"4\" x=\"1\" y=\"1\">Command.cpp</Attribute>\n<Attribute topline=\"1\" x=\"25\" y=\"18\">Command.h</Attribute>\n<Attribute topline=\"16\" x=\"2\" y=\"26\">ConcreteCommand.cpp</Attribute>\n<Attribute topline=\"10\" x=\"25\" y=\"20\">ConcreteCommand.h</Attribute>\n<Attribute topline=\"7\" x=\"22\" y=\"20\">Invoker.cpp</Attribute>\n<Attribute topline=\"5\" x=\"9\" y=\"21\">Invoker.h</Attribute>\n<Attribute topline=\"1\" x=\"2\" y=\"22\">Receiver.cpp</Attribute>\n<Attribute topline=\"1\" x=\"22\" y=\"16\">Receiver.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Command/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Command/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteCommand.h\"\n#include \"Invoker.h\"\n#include \"Receiver.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tReceiver * pReceiver = new Receiver();\n\tConcreteCommand * pCommand = new ConcreteCommand(pReceiver);\n\tInvoker * pInvoker = new Invoker(pCommand);\n\tpInvoker->call();\n\t\n\tdelete pReceiver;\n\tdelete pCommand;\n\tdelete pInvoker;\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Decorator/Component.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Component.cpp\n//  Implementation of the Class Component\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Component.h\"\n\n\nComponent::Component(){\n\n}\n\n\n\nComponent::~Component(){\n\n}\n\n\n\n\n\nvoid Component::operation(){\n\n}"
  },
  {
    "path": "code/Decorator/Component.h",
    "content": "///////////////////////////////////////////////////////////\n//  Component.h\n//  Implementation of the Class Component\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_1FB0D8F7_EC40_4a8c_A5BC_ED236BBDC33E__INCLUDED_)\n#define EA_1FB0D8F7_EC40_4a8c_A5BC_ED236BBDC33E__INCLUDED_\n\nclass Component\n{\n\npublic:\n\tComponent();\n\tvirtual ~Component();\n\n\tvirtual void operation();\n\n};\n#endif // !defined(EA_1FB0D8F7_EC40_4a8c_A5BC_ED236BBDC33E__INCLUDED_)\n"
  },
  {
    "path": "code/Decorator/ConcreteComponent.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteComponent.cpp\n//  Implementation of the Class ConcreteComponent\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteComponent.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteComponent::ConcreteComponent(){\n\n}\n\nConcreteComponent::~ConcreteComponent(){\n\n}\n\nvoid ConcreteComponent::operation(){\n\tcout << \"ConcreteComponent's normal operation!\" << endl;\n}"
  },
  {
    "path": "code/Decorator/ConcreteComponent.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteComponent.h\n//  Implementation of the Class ConcreteComponent\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_A20435BD_1DDE_439d_83AB_73AA7DAD469E__INCLUDED_)\n#define EA_A20435BD_1DDE_439d_83AB_73AA7DAD469E__INCLUDED_\n\n#include \"Component.h\"\n\nclass ConcreteComponent : public Component\n{\n\npublic:\n\tConcreteComponent();\n\tvirtual ~ConcreteComponent();\n\n\tvoid operation();\n\n};\n#endif // !defined(EA_A20435BD_1DDE_439d_83AB_73AA7DAD469E__INCLUDED_)\n"
  },
  {
    "path": "code/Decorator/ConcreteDecoratorA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteDecoratorA.cpp\n//  Implementation of the Class ConcreteDecoratorA\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteDecoratorA.h\"\n#include <iostream>\nusing namespace std;\n\nConcreteDecoratorA::ConcreteDecoratorA(Component* pcmp)\n:Decorator(pcmp)\n{\n\n}\n\nConcreteDecoratorA::~ConcreteDecoratorA(){\n\n}\n\nvoid ConcreteDecoratorA::addBehavior(){\n\tcout << \"addBehavior AAAA\" << endl;\n}\n\n\nvoid ConcreteDecoratorA::operation(){\n\tDecorator::operation();\n\taddBehavior();\n}"
  },
  {
    "path": "code/Decorator/ConcreteDecoratorA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteDecoratorA.h\n//  Implementation of the Class ConcreteDecoratorA\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_6786B68E_DCE4_44c4_B26D_812F0B3C0382__INCLUDED_)\n#define EA_6786B68E_DCE4_44c4_B26D_812F0B3C0382__INCLUDED_\n\n#include \"Decorator.h\"\n#include \"Component.h\"\n\nclass ConcreteDecoratorA : public Decorator\n{\n\npublic:\n\tConcreteDecoratorA(Component* pcmp);\n\tvirtual ~ConcreteDecoratorA();\n\n\tvoid addBehavior();\n\tvirtual void operation();\n\n};\n#endif // !defined(EA_6786B68E_DCE4_44c4_B26D_812F0B3C0382__INCLUDED_)\n"
  },
  {
    "path": "code/Decorator/ConcreteDecoratorB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteDecoratorB.cpp\n//  Implementation of the Class ConcreteDecoratorB\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteDecoratorB.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteDecoratorB::ConcreteDecoratorB(Component* pcmp)\n:Decorator(pcmp)\n{\n\n}\n\n\n\nConcreteDecoratorB::~ConcreteDecoratorB(){\n\n}\n\n\n\n\n\nvoid ConcreteDecoratorB::addBehavior(){\n\tcout << \"addBehavior BBBB\" << endl;\n}\n\n\nvoid ConcreteDecoratorB::operation(){\n\tDecorator::operation();\n\taddBehavior();\n}"
  },
  {
    "path": "code/Decorator/ConcreteDecoratorB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteDecoratorB.h\n//  Implementation of the Class ConcreteDecoratorB\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_D3774874_9201_4a73_956B_78973EC4E890__INCLUDED_)\n#define EA_D3774874_9201_4a73_956B_78973EC4E890__INCLUDED_\n\n#include \"Decorator.h\"\n#include \"Component.h\"\n\nclass ConcreteDecoratorB : public Decorator\n{\n\npublic:\n\tConcreteDecoratorB(Component* pcmp);\n\tvirtual ~ConcreteDecoratorB();\n\n\tvoid addBehavior();\n\tvirtual void operation();\n\n};\n#endif // !defined(EA_D3774874_9201_4a73_956B_78973EC4E890__INCLUDED_)\n"
  },
  {
    "path": "code/Decorator/Decorator.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Decorator.cpp\n//  Implementation of the Class Decorator\n//  Created on:      03-十月-2014 18:53:01\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Decorator.h\"\n\n\nDecorator::Decorator(Component* pcmp){\n\tm_pComponent = pcmp;\n}\n\nDecorator::~Decorator(){\n\n}\n\nvoid Decorator::operation(){\n\tm_pComponent->operation();\n}"
  },
  {
    "path": "code/Decorator/Decorator.h",
    "content": "///////////////////////////////////////////////////////////\n//  Decorator.h\n//  Implementation of the Class Decorator\n//  Created on:      03-十月-2014 18:53:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_1B4529AE_AF10_4b83_B1D5_40C798AFFAAA__INCLUDED_)\n#define EA_1B4529AE_AF10_4b83_B1D5_40C798AFFAAA__INCLUDED_\n\n#include \"Component.h\"\n\nclass Decorator : public Component\n{\n\npublic:\n\tDecorator(Component* pcmp);\n\tvirtual ~Decorator();\n\n\tvoid operation();\n\t\nprivate:\n\tComponent * m_pComponent;\n\n};\n#endif // !defined(EA_1B4529AE_AF10_4b83_B1D5_40C798AFFAAA__INCLUDED_)\n"
  },
  {
    "path": "code/Decorator/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Component.cpp</File>\n\t<File>Component.h</File>\n\t<File>ConcreteComponent.cpp</File>\n\t<File>ConcreteComponent.h</File>\n\t<File>ConcreteDecoratorA.cpp</File>\n\t<File>ConcreteDecoratorA.h</File>\n\t<File>ConcreteDecoratorB.cpp</File>\n\t<File>ConcreteDecoratorB.h</File>\n\t<File>Decorator.cpp</File>\n\t<File>Decorator.h</File>\n<Attribute topline=\"4\" x=\"53\" y=\"12\">main.cpp</Attribute>\n<Attribute topline=\"16\" x=\"2\" y=\"27\">Component.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"18\">Component.h</Attribute>\n<Attribute topline=\"7\" x=\"28\" y=\"8\">ConcreteComponent.cpp</Attribute>\n<Attribute topline=\"4\" x=\"19\" y=\"20\">ConcreteComponent.h</Attribute>\n<Attribute topline=\"13\" x=\"2\" y=\"30\">ConcreteDecoratorA.cpp</Attribute>\n<Attribute topline=\"10\" x=\"25\" y=\"14\">ConcreteDecoratorA.h</Attribute>\n<Attribute topline=\"1\" x=\"21\" y=\"10\">ConcreteDecoratorB.cpp</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"13\">ConcreteDecoratorB.h</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"16\">Decorator.cpp</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"11\">Decorator.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Decorator/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Decorator/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteComponent.h\"\n#include \"ConcreteDecoratorA.h\"\n#include \"ConcreteDecoratorB.h\"\n#include \"Component.h\"\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tConcreteComponent * pRealProd = new ConcreteComponent();\n\t//̬Ϊ \n\tComponent * pA = new ConcreteDecoratorA(pRealProd);\n\tpA->operation();\n\t//̬Ϊ \n\tComponent * pB = new ConcreteDecoratorB(pA);\n\tpB->operation();\n\t\n\tdelete pRealProd;\n\tdelete pA;\n\tdelete pB;\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Facade/Client.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Client.cpp\n//  Implementation of the Class Client\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Client.h\"\n\n\nClient::Client(){\n\n}\n\n\n\nClient::~Client(){\n\n}"
  },
  {
    "path": "code/Facade/Client.h",
    "content": "///////////////////////////////////////////////////////////\n//  Client.h\n//  Implementation of the Class Client\n//  Created on:      06-十月-2014 19:10:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_FB09DAF1_FBE1_4f6e_BD52_72D69A9FCA56__INCLUDED_)\n#define EA_FB09DAF1_FBE1_4f6e_BD52_72D69A9FCA56__INCLUDED_\n\nclass Client\n{\n\npublic:\n\tClient();\n\tvirtual ~Client();\n\n};\n#endif // !defined(EA_FB09DAF1_FBE1_4f6e_BD52_72D69A9FCA56__INCLUDED_)\n"
  },
  {
    "path": "code/Facade/Facade.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Facade.cpp\n//  Implementation of the Class Facade\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Facade.h\"\n\n\nFacade::Facade(){\n\tm_SystemA  = new SystemA();\n\tm_SystemB = new SystemB();\n\tm_SystemC = new SystemC();\n}\n\n\n\nFacade::~Facade(){\n\tdelete m_SystemA;\n\tdelete m_SystemB;\n\tdelete m_SystemC;\n}\n\nvoid Facade::wrapOpration(){\n\tm_SystemA->operationA();\n\tm_SystemB->operationB();\n\tm_SystemC->opeartionC();\n}"
  },
  {
    "path": "code/Facade/Facade.h",
    "content": "///////////////////////////////////////////////////////////\n//  Facade.h\n//  Implementation of the Class Facade\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_FD130A87_92A9_4168_9B33_7A925C47AFD5__INCLUDED_)\n#define EA_FD130A87_92A9_4168_9B33_7A925C47AFD5__INCLUDED_\n\n#include \"SystemC.h\"\n#include \"SystemA.h\"\n#include \"SystemB.h\"\n\nclass Facade\n{\n\npublic:\n\tFacade();\n\tvirtual ~Facade();\n\n\tvoid wrapOpration();\n\nprivate:\n\tSystemC *m_SystemC;\n\tSystemA *m_SystemA;\n\tSystemB *m_SystemB;\n};\n#endif // !defined(EA_FD130A87_92A9_4168_9B33_7A925C47AFD5__INCLUDED_)\n"
  },
  {
    "path": "code/Facade/SystemA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  SystemA.cpp\n//  Implementation of the Class SystemA\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"SystemA.h\"\n#include <iostream>\nusing namespace std;\n\nSystemA::SystemA(){\n\n}\n\n\n\nSystemA::~SystemA(){\n\n}\n\n\n\n\n\nvoid SystemA::operationA(){\n\tcout << \"operationA\" << endl;\n}"
  },
  {
    "path": "code/Facade/SystemA.h",
    "content": "///////////////////////////////////////////////////////////\n//  SystemA.h\n//  Implementation of the Class SystemA\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_4EADC06E_6529_4fd1_B3B2_4C2A130E1229__INCLUDED_)\n#define EA_4EADC06E_6529_4fd1_B3B2_4C2A130E1229__INCLUDED_\n\nclass SystemA\n{\n\npublic:\n\tSystemA();\n\tvirtual ~SystemA();\n\n\tvoid operationA();\n\n};\n#endif // !defined(EA_4EADC06E_6529_4fd1_B3B2_4C2A130E1229__INCLUDED_)\n"
  },
  {
    "path": "code/Facade/SystemB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  SystemB.cpp\n//  Implementation of the Class SystemB\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"SystemB.h\"\n#include <iostream>\nusing namespace std;\n\n\nSystemB::SystemB(){\n\n}\n\n\n\nSystemB::~SystemB(){\n\n}\n\n\n\n\n\nvoid SystemB::operationB(){\n\tcout << \"operationB\" << endl;\n}"
  },
  {
    "path": "code/Facade/SystemB.h",
    "content": "///////////////////////////////////////////////////////////\n//  SystemB.h\n//  Implementation of the Class SystemB\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_ED8A018A_4813_445c_BEB5_3C1A9C2D458E__INCLUDED_)\n#define EA_ED8A018A_4813_445c_BEB5_3C1A9C2D458E__INCLUDED_\n\nclass SystemB\n{\n\npublic:\n\tSystemB();\n\tvirtual ~SystemB();\n\n\tvoid operationB();\n\n};\n#endif // !defined(EA_ED8A018A_4813_445c_BEB5_3C1A9C2D458E__INCLUDED_)\n"
  },
  {
    "path": "code/Facade/SystemC.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  SystemC.cpp\n//  Implementation of the Class SystemC\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"SystemC.h\"\n#include <iostream>\nusing namespace std;\n\nSystemC::SystemC(){\n\n}\n\n\n\nSystemC::~SystemC(){\n\n}\n\n\n\n\n\nvoid SystemC::opeartionC(){\n\tcout << \"operationC\" << endl;\n}"
  },
  {
    "path": "code/Facade/SystemC.h",
    "content": "///////////////////////////////////////////////////////////\n//  SystemC.h\n//  Implementation of the Class SystemC\n//  Created on:      06-十月-2014 19:10:44\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_CC90A19E_B6A2_4247_ACCD_F39F749C19D0__INCLUDED_)\n#define EA_CC90A19E_B6A2_4247_ACCD_F39F749C19D0__INCLUDED_\n\nclass SystemC\n{\n\npublic:\n\tSystemC();\n\tvirtual ~SystemC();\n\n\tvoid opeartionC();\n\n};\n#endif // !defined(EA_CC90A19E_B6A2_4247_ACCD_F39F749C19D0__INCLUDED_)\n"
  },
  {
    "path": "code/Facade/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Facade.cpp</File>\n\t<File>Facade.h</File>\n\t<File>SystemA.cpp</File>\n\t<File>SystemA.h</File>\n\t<File>SystemB.cpp</File>\n\t<File>SystemB.h</File>\n\t<File>SystemC.cpp</File>\n\t<File>SystemC.h</File>\n<Attribute topline=\"1\" x=\"1\" y=\"12\">main.cpp</Attribute>\n<Attribute topline=\"16\" x=\"2\" y=\"29\">Facade.cpp</Attribute>\n<Attribute topline=\"13\" x=\"20\" y=\"26\">Facade.h</Attribute>\n<Attribute topline=\"10\" x=\"31\" y=\"27\">SystemA.cpp</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"1\">SystemA.h</Attribute>\n<Attribute topline=\"13\" x=\"21\" y=\"28\">SystemB.cpp</Attribute>\n<Attribute topline=\"10\" x=\"21\" y=\"27\">SystemC.cpp</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Facade/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Facade/main.cpp",
    "content": "#include <iostream>\n#include \"Facade.h\"\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tFacade fa;\n\tfa.wrapOpration();\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/FactoryMethod/Client.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Client.cpp\n//  Implementation of the Class Client\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"Client.h\"\n\n\nClient::Client(){\n\n}\n\n\n\nClient::~Client(){\n\n}"
  },
  {
    "path": "code/FactoryMethod/Client.h",
    "content": "///////////////////////////////////////////////////////////\n//  Client.h\n//  Implementation of the Class Client\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_18EFCEE9_550F_4132_986C_CB1894F63B40__INCLUDED_)\n#define EA_18EFCEE9_550F_4132_986C_CB1894F63B40__INCLUDED_\n\nclass Client\n{\n\npublic:\n\tClient();\n\tvirtual ~Client();\n\n};\n#endif // !defined(EA_18EFCEE9_550F_4132_986C_CB1894F63B40__INCLUDED_)\n"
  },
  {
    "path": "code/FactoryMethod/ConcreteFactory.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory.cpp\n//  Implementation of the Class ConcreteFactory\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteFactory.h\"\n#include \"ConcreteProduct.h\"\n\nConcreteFactory::ConcreteFactory(){\n\n}\n\n\nConcreteFactory::~ConcreteFactory(){\n\n}\n\nProduct* ConcreteFactory::factoryMethod(){\n\n\treturn  new ConcreteProduct();\n}"
  },
  {
    "path": "code/FactoryMethod/ConcreteFactory.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFactory.h\n//  Implementation of the Class ConcreteFactory\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_99AEC7F3_304D_41c6_A35C_A81D7E5B280F__INCLUDED_)\n#define EA_99AEC7F3_304D_41c6_A35C_A81D7E5B280F__INCLUDED_\n\n#include \"Product.h\"\n#include \"Factory.h\"\n\nclass ConcreteFactory : public Factory\n{\n\npublic:\n\tConcreteFactory();\n\tvirtual ~ConcreteFactory();\n\n\tvirtual Product* factoryMethod();\n\n};\n#endif // !defined(EA_99AEC7F3_304D_41c6_A35C_A81D7E5B280F__INCLUDED_)\n"
  },
  {
    "path": "code/FactoryMethod/ConcreteProduct.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProduct.cpp\n//  Implementation of the Class ConcreteProduct\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteProduct.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteProduct::ConcreteProduct(){\n\n}\n\n\n\nConcreteProduct::~ConcreteProduct(){\n\n}\n\n\n\n\n\nvoid ConcreteProduct::use(){\n\tcout << \"use prodect A\" << endl;\n}"
  },
  {
    "path": "code/FactoryMethod/ConcreteProduct.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProduct.h\n//  Implementation of the Class ConcreteProduct\n//  Created on:      02-十月-2014 10:18:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_EF9F81B2_79BC_4b45_BB45_60E30EE545C4__INCLUDED_)\n#define EA_EF9F81B2_79BC_4b45_BB45_60E30EE545C4__INCLUDED_\n\n#include \"Product.h\"\n\nclass ConcreteProduct : public Product\n{\n\npublic:\n\tConcreteProduct();\n\tvirtual ~ConcreteProduct();\n\n\tvirtual void use();\n\n};\n#endif // !defined(EA_EF9F81B2_79BC_4b45_BB45_60E30EE545C4__INCLUDED_)\n"
  },
  {
    "path": "code/FactoryMethod/Factory.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Factory.cpp\n//  Implementation of the Class Factory\n//  Created on:      02-十月-2014 10:18:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Factory.h\"\n#include<stdio.h> \n\n\nFactory::Factory(){\n\n}\n\n\n\nFactory::~Factory(){\n\n}\n\nProduct* Factory::factoryMethod(){\n\treturn  NULL;\n}\n\n"
  },
  {
    "path": "code/FactoryMethod/Factory.h",
    "content": "///////////////////////////////////////////////////////////\n//  Factory.h\n//  Implementation of the Class Factory\n//  Created on:      02-十月-2014 10:18:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_BB1E9945_CCF9_4d5c_8B7D_C3D86C0C2856__INCLUDED_)\n#define EA_BB1E9945_CCF9_4d5c_8B7D_C3D86C0C2856__INCLUDED_\n\n#include \"Product.h\"\n\nclass Factory\n{\n\npublic:\n\tFactory();\n\tvirtual ~Factory();\n\n\tvirtual Product* factoryMethod();\n\n};\n#endif // !defined(EA_BB1E9945_CCF9_4d5c_8B7D_C3D86C0C2856__INCLUDED_)\n"
  },
  {
    "path": "code/FactoryMethod/Product.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Product.cpp\n//  Implementation of the Class Product\n//  Created on:      02-十月-2014 10:19:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Product.h\"\n\n\nProduct::Product(){\n\n}\n\n\n\nProduct::~Product(){\n\n}\n\n\n\n\n\nvoid Product::use(){\n\n}"
  },
  {
    "path": "code/FactoryMethod/Product.h",
    "content": "///////////////////////////////////////////////////////////\n//  Product.h\n//  Implementation of the Class Product\n//  Created on:      02-十月-2014 10:19:00\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_071D24B8_F0A3_4f19_955A_8F5511036EF0__INCLUDED_)\n#define EA_071D24B8_F0A3_4f19_955A_8F5511036EF0__INCLUDED_\n\nclass Product\n{\n\npublic:\n\tProduct();\n\tvirtual ~Product();\n\n\tvirtual void use();\n\n};\n#endif // !defined(EA_071D24B8_F0A3_4f19_955A_8F5511036EF0__INCLUDED_)\n"
  },
  {
    "path": "code/FactoryMethod/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Client.cpp</File>\n\t<File>Client.h</File>\n\t<File>ConcreteFactory.cpp</File>\n\t<File>ConcreteFactory.h</File>\n\t<File>ConcreteProduct.cpp</File>\n\t<File>ConcreteProduct.h</File>\n\t<File>Factory.cpp</File>\n\t<File>Factory.h</File>\n\t<File>Product.cpp</File>\n\t<File>Product.h</File>\n<Attribute topline=\"1\" x=\"2\" y=\"12\">main.cpp</Attribute>\n<Attribute topline=\"4\" x=\"1\" y=\"21\">ConcreteFactory.cpp</Attribute>\n<Attribute topline=\"10\" x=\"27\" y=\"21\">ConcreteFactory.h</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"26\">ConcreteProduct.cpp</Attribute>\n<Attribute topline=\"4\" x=\"1\" y=\"1\">ConcreteProduct.h</Attribute>\n<Attribute topline=\"14\" x=\"1\" y=\"25\">Factory.cpp</Attribute>\n<Attribute topline=\"1\" x=\"10\" y=\"20\">Factory.h</Attribute>\n<Attribute topline=\"1\" x=\"21\" y=\"18\">Product.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/FactoryMethod/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/FactoryMethod/main.cpp",
    "content": "#include \"Factory.h\"\n#include \"ConcreteFactory.h\"\n#include \"Product.h\"\n#include <iostream>\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tFactory * fc = new ConcreteFactory();\n\tProduct * prod = fc->factoryMethod();\n\tprod->use();\n\t\n\tdelete fc;\n\tdelete prod;\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Flyweight/ConcreteFlyweight.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFlyweight.cpp\n//  Implementation of the Class ConcreteFlyweight\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteFlyweight.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteFlyweight::ConcreteFlyweight(string str){\n\tintrinsicState = str;\n}\n\nConcreteFlyweight::~ConcreteFlyweight(){\n\n}\n\nvoid ConcreteFlyweight::operation(){\n\tcout << \"Flyweight[\" << intrinsicState << \"] do operation.\" << endl; \n}"
  },
  {
    "path": "code/Flyweight/ConcreteFlyweight.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteFlyweight.h\n//  Implementation of the Class ConcreteFlyweight\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_C0AF438E_96E4_46f1_ADEC_308EF16E11D1__INCLUDED_)\n#define EA_C0AF438E_96E4_46f1_ADEC_308EF16E11D1__INCLUDED_\n\n#include \"Flyweight.h\"\n#include <string>\nusing namespace std;\n\nclass ConcreteFlyweight : public Flyweight\n{\n\npublic:\n\tConcreteFlyweight(string str);\n\tvirtual ~ConcreteFlyweight();\n\n\tvirtual void operation();\n\nprivate:\n\tstring intrinsicState;\n\n};\n#endif // !defined(EA_C0AF438E_96E4_46f1_ADEC_308EF16E11D1__INCLUDED_)\n"
  },
  {
    "path": "code/Flyweight/Flyweight.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Flyweight.cpp\n//  Implementation of the Class Flyweight\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Flyweight.h\"\n\n\nFlyweight::Flyweight(){\n\n}\n\n\n\nFlyweight::~Flyweight(){\n\n}\n\n\n\n\n\nvoid Flyweight::operation(){\n\n}"
  },
  {
    "path": "code/Flyweight/Flyweight.h",
    "content": "///////////////////////////////////////////////////////////\n//  Flyweight.h\n//  Implementation of the Class Flyweight\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_33A7FB32_88ED_4585_83D3_188CF17052A8__INCLUDED_)\n#define EA_33A7FB32_88ED_4585_83D3_188CF17052A8__INCLUDED_\n\nclass Flyweight\n{\n\npublic:\n\tFlyweight();\n\tvirtual ~Flyweight();\n\n\tvirtual void operation();\n\n};\n#endif // !defined(EA_33A7FB32_88ED_4585_83D3_188CF17052A8__INCLUDED_)\n"
  },
  {
    "path": "code/Flyweight/FlyweightFactory.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  FlyweightFactory.cpp\n//  Implementation of the Class FlyweightFactory\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"FlyweightFactory.h\"\n#include \"ConcreteFlyweight.h\"\n#include <iostream>\nusing namespace std;\n\nFlyweightFactory::FlyweightFactory(){\n\n}\n\n\n\nFlyweightFactory::~FlyweightFactory(){\n\n}\n\nFlyweight* FlyweightFactory::getFlyweight(string str){\n\tmap<string,Flyweight*>::iterator itr = m_mpFlyweight.find(str);\n\tif(itr == m_mpFlyweight.end())\n\t{\n\t\tFlyweight * fw = new ConcreteFlyweight(str);\n\t\tm_mpFlyweight.insert(make_pair(str,fw));\n\t\treturn fw;\t\n\t}\n\telse\n\t{\n\t\tcout << \"aready in the pool,use the exist one:\" << endl;\n\t\treturn itr->second;\n\t}\t\t\n}"
  },
  {
    "path": "code/Flyweight/FlyweightFactory.h",
    "content": "///////////////////////////////////////////////////////////\n//  FlyweightFactory.h\n//  Implementation of the Class FlyweightFactory\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_C0370E5F_AC7A_4f98_8E8B_CAA37A1EE7EA__INCLUDED_)\n#define EA_C0370E5F_AC7A_4f98_8E8B_CAA37A1EE7EA__INCLUDED_\n\n#include \"Flyweight.h\"\n#include <map>\n#include <string>\nusing namespace std;\n\nclass FlyweightFactory\n{\n\npublic:\n\tFlyweightFactory();\n\tvirtual ~FlyweightFactory();\n\n\tFlyweight*  getFlyweight(string str);\n\nprivate:\n\tmap<string,Flyweight*> m_mpFlyweight;\n\n};\n#endif // !defined(EA_C0370E5F_AC7A_4f98_8E8B_CAA37A1EE7EA__INCLUDED_)\n"
  },
  {
    "path": "code/Flyweight/UnsharedConcreteFlyweight.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  UnsharedConcreteFlyweight.cpp\n//  Implementation of the Class UnsharedConcreteFlyweight\n//  Created on:      06-十月-2014 20:10:43\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"UnsharedConcreteFlyweight.h\"\n\n\nUnsharedConcreteFlyweight::UnsharedConcreteFlyweight(){\n\n}\n\n\n\nUnsharedConcreteFlyweight::~UnsharedConcreteFlyweight(){\n\n}\n\n\n\n\n\nvoid UnsharedConcreteFlyweight::operation(){\n\n}"
  },
  {
    "path": "code/Flyweight/UnsharedConcreteFlyweight.h",
    "content": "///////////////////////////////////////////////////////////\n//  UnsharedConcreteFlyweight.h\n//  Implementation of the Class UnsharedConcreteFlyweight\n//  Created on:      06-十月-2014 20:10:42\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_63FB0A19_070D_4a21_BCE7_CB5834C0C14D__INCLUDED_)\n#define EA_63FB0A19_070D_4a21_BCE7_CB5834C0C14D__INCLUDED_\n\n#include \"Flyweight.h\"\n\nclass UnsharedConcreteFlyweight : public Flyweight\n{\n\npublic:\n\tUnsharedConcreteFlyweight();\n\tvirtual ~UnsharedConcreteFlyweight();\n\n\tvoid operation();\n\nprivate:\n\tint allState;\n\n};\n#endif // !defined(EA_63FB0A19_070D_4a21_BCE7_CB5834C0C14D__INCLUDED_)\n"
  },
  {
    "path": "code/Flyweight/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>ConcreteFlyweight.cpp</File>\n\t<File>ConcreteFlyweight.h</File>\n\t<File>Flyweight.cpp</File>\n\t<File>Flyweight.h</File>\n\t<File>FlyweightFactory.cpp</File>\n\t<File>FlyweightFactory.h</File>\n<Attribute topline=\"1\" x=\"16\" y=\"17\">main.cpp</Attribute>\n<Attribute topline=\"10\" x=\"2\" y=\"15\">ConcreteFlyweight.cpp</Attribute>\n<Attribute topline=\"7\" x=\"32\" y=\"19\">ConcreteFlyweight.h</Attribute>\n<Attribute topline=\"1\" x=\"16\" y=\"11\">Flyweight.h</Attribute>\n<Attribute topline=\"13\" x=\"3\" y=\"26\">FlyweightFactory.cpp</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"27\">FlyweightFactory.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Flyweight/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Flyweight/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteFlyweight.h\"\n#include \"FlyweightFactory.h\"\n#include \"Flyweight.h\"\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tFlyweightFactory factory;\n\tFlyweight * fw = factory.getFlyweight(\"one\");\n\tfw->operation();\n\t\n\tFlyweight * fw2 = factory.getFlyweight(\"two\");\n\tfw2->operation();\n\t//aready exist in pool\n\tFlyweight * fw3 = factory.getFlyweight(\"one\");\n\tfw3->operation();\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Mediator/Colleague.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Colleague.cpp\n//  Implementation of the Class Colleague\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Colleague.h\"\n#include \"Mediator.h\"\n#include <iostream>\nusing namespace std;\n\nColleague::Colleague(){\n\n}\n\n\n\nColleague::~Colleague(){\n\n}\n\nvoid Colleague::receivemsg(string str){\n\tcout << \"reveivemsg:\" << str <<endl;\n}\n\n\nvoid Colleague::sendmsg(int toWho,string str){\n\n}\n\n\nvoid Colleague::setMediator(Mediator * aMediator){\n\tm_pMediator = aMediator;\n}"
  },
  {
    "path": "code/Mediator/Colleague.h",
    "content": "///////////////////////////////////////////////////////////\n//  Colleague.h\n//  Implementation of the Class Colleague\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_216CC2D4_9FEB_466b_B7F7_B7F5199798A8__INCLUDED_)\n#define EA_216CC2D4_9FEB_466b_B7F7_B7F5199798A8__INCLUDED_\n\n#include \"Mediator.h\"\n#include <string>\nusing namespace std;\n\nclass Colleague\n{\n\npublic:\n\tColleague();\n\tvirtual ~Colleague();\n\n\tvirtual void receivemsg(string str);\n\tvirtual void sendmsg(int toWho,string str);\n\tvoid setMediator(Mediator * aMediator);\nprotected:\n\tMediator * m_pMediator;\n\n};\n#endif // !defined(EA_216CC2D4_9FEB_466b_B7F7_B7F5199798A8__INCLUDED_)\n"
  },
  {
    "path": "code/Mediator/ConcreteColleagueA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteColleagueA.cpp\n//  Implementation of the Class ConcreteColleagueA\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteColleagueA.h\"\n#include <iostream>\nusing namespace std;\n\nConcreteColleagueA::ConcreteColleagueA(){\n}\n\nConcreteColleagueA::~ConcreteColleagueA(){\n}\n\nvoid ConcreteColleagueA::sendmsg(int toWho,string str){\n\tcout << \"send msg from colleagueA,to:\" << toWho << endl;\n\tm_pMediator->operation(toWho,str);\n}\n\nvoid ConcreteColleagueA::receivemsg(string str){\n\tcout << \"ConcreteColleagueA reveivemsg:\" << str <<endl;\n}\n"
  },
  {
    "path": "code/Mediator/ConcreteColleagueA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteColleagueA.h\n//  Implementation of the Class ConcreteColleagueA\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_79979DD4_1E73_46db_A635_E3F516ACCE0A__INCLUDED_)\n#define EA_79979DD4_1E73_46db_A635_E3F516ACCE0A__INCLUDED_\n\n#include \"Colleague.h\"\n\nclass ConcreteColleagueA : public Colleague\n{\n\npublic:\n\tConcreteColleagueA();\n\tvirtual ~ConcreteColleagueA();\n\n\tvirtual void sendmsg(int toWho,string str);\n\tvirtual void receivemsg(string str);\n\n};\n#endif // !defined(EA_79979DD4_1E73_46db_A635_E3F516ACCE0A__INCLUDED_)\n"
  },
  {
    "path": "code/Mediator/ConcreteColleagueB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteColleagueB.cpp\n//  Implementation of the Class ConcreteColleagueB\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteColleagueB.h\"\n#include <iostream>\nusing namespace std;\n\n\nConcreteColleagueB::ConcreteColleagueB(){\n\n}\n\n\n\nConcreteColleagueB::~ConcreteColleagueB(){\n\n}\n\nvoid ConcreteColleagueB::sendmsg(int toWho,string str){\n\tcout << \"send msg from colleagueB,to:\" << toWho << endl;\n\tm_pMediator->operation(toWho,str);\n}\n\nvoid ConcreteColleagueB::receivemsg(string str){\n\tcout << \"ConcreteColleagueB reveivemsg:\" << str <<endl;\n}\n\n"
  },
  {
    "path": "code/Mediator/ConcreteColleagueB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteColleagueB.h\n//  Implementation of the Class ConcreteColleagueB\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_BA6AA11F_3B6A_40dc_A37E_9B226AE90491__INCLUDED_)\n#define EA_BA6AA11F_3B6A_40dc_A37E_9B226AE90491__INCLUDED_\n\n#include \"Colleague.h\"\n\nclass ConcreteColleagueB : public Colleague\n{\n\npublic:\n\tConcreteColleagueB();\n\tvirtual ~ConcreteColleagueB();\n\n\tvirtual void sendmsg(int toWho,string str);\n\tvirtual void receivemsg(string str);\n};\n#endif // !defined(EA_BA6AA11F_3B6A_40dc_A37E_9B226AE90491__INCLUDED_)\n"
  },
  {
    "path": "code/Mediator/ConcreteMediator.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteMediator.cpp\n//  Implementation of the Class ConcreteMediator\n//  Created on:      07-十月-2014 21:30:48\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteMediator.h\"\n#include <map>\n#include <iostream>\nusing namespace std;\n\nConcreteMediator::ConcreteMediator(){\n\n}\n\nConcreteMediator::~ConcreteMediator(){\n\n}\n\nvoid ConcreteMediator::operation(int nWho,string str){\n\tmap<int,Colleague*>::const_iterator itr = m_mpColleague.find(nWho);\n\tif(itr == m_mpColleague.end())\n\t{\n\t\tcout << \"not found this colleague!\" << endl;\n\t\treturn;\n\t}\n\t\n\tColleague* pc = itr->second;\n\tpc->receivemsg(str);\n}\n\n\nvoid ConcreteMediator::registered(int nWho,Colleague * aColleague){\n\tmap<int,Colleague*>::const_iterator itr = m_mpColleague.find(nWho);\n\tif(itr == m_mpColleague.end())\n\t{\n\t\tm_mpColleague.insert(make_pair(nWho,aColleague));\n\t\t//同时将中介类暴露给colleague \n\t\taColleague->setMediator(this);\n\t}\n}"
  },
  {
    "path": "code/Mediator/ConcreteMediator.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteMediator.h\n//  Implementation of the Class ConcreteMediator\n//  Created on:      07-十月-2014 21:30:47\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_8CECE546_61DD_456f_A3E7_D98BC078D8E8__INCLUDED_)\n#define EA_8CECE546_61DD_456f_A3E7_D98BC078D8E8__INCLUDED_\n\n#include \"ConcreteColleagueB.h\"\n#include \"Mediator.h\"\n#include \"ConcreteColleagueA.h\"\n#include <map>\nusing namespace std;\nclass ConcreteMediator : public Mediator\n{\n\npublic:\n\tConcreteMediator();\n\tvirtual ~ConcreteMediator();\n\n\tvirtual void operation(int nWho,string str);\n\tvirtual void registered(int nWho, Colleague * aColleague);\nprivate:\n\tmap<int,Colleague*> m_mpColleague;\n};\n#endif // !defined(EA_8CECE546_61DD_456f_A3E7_D98BC078D8E8__INCLUDED_)\n"
  },
  {
    "path": "code/Mediator/Mediator.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Mediator.cpp\n//  Implementation of the Class Mediator\n//  Created on:      07-十月-2014 21:30:48\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Mediator.h\"\n#include \"Colleague.h\"\n\nMediator::Mediator(){\n\n}\n\nMediator::~Mediator(){\n\n}\n\nvoid Mediator::operation(int nWho,string str){\n}\n\n\nvoid Mediator::registered(int nWho,Colleague * aColleague){\n}"
  },
  {
    "path": "code/Mediator/Mediator.h",
    "content": "///////////////////////////////////////////////////////////\n//  Mediator.h\n//  Implementation of the Class Mediator\n//  Created on:      07-十月-2014 21:30:48\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_6E33A7CE_E410_460e_884D_607B81669C44__INCLUDED_)\n#define EA_6E33A7CE_E410_460e_884D_607B81669C44__INCLUDED_\n\n#include <string>\n\nusing namespace std;\n\n// 注：由于两个类相互引用， 这里不能直接#include  Colleague头文件,而使用声明； \nclass Colleague;\n\nclass Mediator\n{\n\npublic:\n\tMediator();\n\tvirtual ~Mediator();\n\n\tvirtual void operation(int nWho,string str);\n\tvirtual void registered(int nWho, Colleague * aColleague);\n\n};\n#endif // !defined(EA_6E33A7CE_E410_460e_884D_607B81669C44__INCLUDED_)\n"
  },
  {
    "path": "code/Mediator/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Colleague.cpp</File>\n\t<File>Colleague.h</File>\n\t<File>ConcreteColleagueA.cpp</File>\n\t<File>ConcreteColleagueA.h</File>\n\t<File>ConcreteColleagueB.cpp</File>\n\t<File>ConcreteColleagueB.h</File>\n\t<File>ConcreteMediator.cpp</File>\n\t<File>ConcreteMediator.h</File>\n\t<File>Mediator.cpp</File>\n\t<File>Mediator.h</File>\n<Attribute topline=\"4\" x=\"18\" y=\"12\">main.cpp</Attribute>\n<Attribute topline=\"15\" x=\"1\" y=\"23\">Colleague.cpp</Attribute>\n<Attribute topline=\"16\" x=\"1\" y=\"22\">Colleague.h</Attribute>\n<Attribute topline=\"10\" x=\"1\" y=\"26\">ConcreteColleagueA.cpp</Attribute>\n<Attribute topline=\"7\" x=\"19\" y=\"20\">ConcreteColleagueA.h</Attribute>\n<Attribute topline=\"16\" x=\"30\" y=\"29\">ConcreteColleagueB.cpp</Attribute>\n<Attribute topline=\"10\" x=\"38\" y=\"21\">ConcreteColleagueB.h</Attribute>\n<Attribute topline=\"28\" x=\"1\" y=\"20\">ConcreteMediator.cpp</Attribute>\n<Attribute topline=\"13\" x=\"32\" y=\"28\">ConcreteMediator.h</Attribute>\n<Attribute topline=\"7\" x=\"1\" y=\"8\">Mediator.cpp</Attribute>\n<Attribute topline=\"13\" x=\"79\" y=\"15\">Mediator.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Mediator/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Mediator/main.cpp",
    "content": "#include <iostream>\n#include \"ConcreteColleagueA.h\"\n#include \"ConcreteMediator.h\"\n#include \"ConcreteColleagueB.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tConcreteColleagueA * pa = new ConcreteColleagueA();\n\tConcreteColleagueB * pb = new ConcreteColleagueB();\n\tConcreteMediator * pm = new ConcreteMediator();\n\tpm->registered(1,pa);\n\tpm->registered(2,pb);\n\t\n\t// sendmsg from a to b\n\tpa->sendmsg(2,\"hello,i am a\");\n\t// sendmsg from b to a\n\tpb->sendmsg(1,\"hello,i am b\");\n\t\n\tdelete pa,pb,pm;\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Obeserver/ConcreteObeserver.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteObeserver.cpp\n//  Implementation of the Class ConcreteObeserver\n//  Created on:      07-十月-2014 23:00:09\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteObeserver.h\"\n#include <iostream>\n#include <vector>\n#include \"Subject.h\"\nusing namespace std;\n\nConcreteObeserver::ConcreteObeserver(string name){\n\tm_objName = name;\n}\n\nConcreteObeserver::~ConcreteObeserver(){\n\n}\n\nvoid ConcreteObeserver::update(Subject * sub){\n\tm_obeserverState = sub->getState();\n\tcout << \"update oberserver[\" << m_objName << \"] state:\" << m_obeserverState << endl;\n}\n"
  },
  {
    "path": "code/Obeserver/ConcreteObeserver.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteObeserver.h\n//  Implementation of the Class ConcreteObeserver\n//  Created on:      07-十月-2014 23:00:09\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_7B020534_BFEA_4c9e_8E4C_34DCE001E9B1__INCLUDED_)\n#define EA_7B020534_BFEA_4c9e_8E4C_34DCE001E9B1__INCLUDED_\n#include \"Obeserver.h\"\n#include <string>\nusing namespace std;\n\nclass ConcreteObeserver : public Obeserver\n{\n\npublic:\n\tConcreteObeserver(string name);\n\tvirtual ~ConcreteObeserver();\n\tvirtual void update(Subject * sub);\n\nprivate:\n\tstring m_objName;\n\tint m_obeserverState;\n};\n#endif // !defined(EA_7B020534_BFEA_4c9e_8E4C_34DCE001E9B1__INCLUDED_)\n"
  },
  {
    "path": "code/Obeserver/ConcreteSubject.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteSubject.cpp\n//  Implementation of the Class ConcreteSubject\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteSubject.h\"\n\n\nConcreteSubject::ConcreteSubject(){\n\n}\n\nConcreteSubject::~ConcreteSubject(){\n\n}\n\n\nint ConcreteSubject::getState(){\n\treturn m_nState;\n}\n\n\nvoid ConcreteSubject::setState(int i){\n\tm_nState = i;\n}\n"
  },
  {
    "path": "code/Obeserver/ConcreteSubject.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteSubject.h\n//  Implementation of the Class ConcreteSubject\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_13122F7D_1635_4e20_ADC6_87933BB1B603__INCLUDED_)\n#define EA_13122F7D_1635_4e20_ADC6_87933BB1B603__INCLUDED_\n\n#include \"Subject.h\"\n\nclass ConcreteSubject : public Subject\n{\n\npublic:\n\tConcreteSubject();\n\tvirtual ~ConcreteSubject();\n\n\tvirtual int getState();\n\tvirtual void setState(int i);\n\nprivate:\n\tint m_nState;\n\n};\n#endif // !defined(EA_13122F7D_1635_4e20_ADC6_87933BB1B603__INCLUDED_)\n"
  },
  {
    "path": "code/Obeserver/Obeserver.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Obeserver.cpp\n//  Implementation of the Class Obeserver\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"Obeserver.h\"\n\nObeserver::Obeserver(){\n}\n\nObeserver::~Obeserver(){\n}"
  },
  {
    "path": "code/Obeserver/Obeserver.h",
    "content": "///////////////////////////////////////////////////////////\n//  Obeserver.h\n//  Implementation of the Class Obeserver\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_2C7362B2_0B22_4168_8690_F9C7B76C343F__INCLUDED_)\n#define EA_2C7362B2_0B22_4168_8690_F9C7B76C343F__INCLUDED_\n\nclass Subject;\n\nclass Obeserver\n{\n\npublic:\n\tObeserver();\n\tvirtual ~Obeserver();\n\tvirtual void update(Subject * sub) = 0;\n};\n#endif // !defined(EA_2C7362B2_0B22_4168_8690_F9C7B76C343F__INCLUDED_)\n"
  },
  {
    "path": "code/Obeserver/Subject.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Subject.cpp\n//  Implementation of the Class Subject\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#include \"Subject.h\"\n\nSubject::Subject(){\n\n}\n\nSubject::~Subject(){\n\n}\n\nvoid Subject::attach(Obeserver * pObeserver){\n\tm_vtObj.push_back(pObeserver);\n}\n\nvoid Subject::detach(Obeserver * pObeserver){\n\tfor(vector<Obeserver*>::iterator itr = m_vtObj.begin();\n\t\titr != m_vtObj.end(); itr++)\n\t{\n\t\tif(*itr == pObeserver)\n\t\t{\n\t\t\tm_vtObj.erase(itr);\n\t\t\treturn;\n\t\t}\t\t\t\n\t}\n}\n\nvoid Subject::notify(){\n\tfor(vector<Obeserver*>::iterator itr = m_vtObj.begin();\n\t\titr != m_vtObj.end();\n\t \titr++)\n\t{\t\n\t\t(*itr)->update(this);\t\t\n\t}\n}"
  },
  {
    "path": "code/Obeserver/Subject.h",
    "content": "///////////////////////////////////////////////////////////\n//  Subject.h\n//  Implementation of the Class Subject\n//  Created on:      07-十月-2014 23:00:10\n//  Original author: cl\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_61998456_1B61_49f4_B3EA_9D28EEBC9649__INCLUDED_)\n#define EA_61998456_1B61_49f4_B3EA_9D28EEBC9649__INCLUDED_\n\n#include \"Obeserver.h\"\n#include <vector>\nusing namespace std;\n\nclass Subject\n{\n\npublic:\n\tSubject();\n\tvirtual ~Subject();\n\tObeserver *m_Obeserver;\n\n\tvoid attach(Obeserver * pObeserver);\n\tvoid detach(Obeserver * pObeserver);\n\tvoid notify();\n\t\t\n\tvirtual int getState() = 0;\n\tvirtual void setState(int i)= 0;\n\t\nprivate:\n\tvector<Obeserver*> m_vtObj;\n\n};\n#endif // !defined(EA_61998456_1B61_49f4_B3EA_9D28EEBC9649__INCLUDED_)\n"
  },
  {
    "path": "code/Obeserver/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>ConcreteObeserver.cpp</File>\n\t<File>ConcreteObeserver.h</File>\n\t<File>ConcreteSubject.cpp</File>\n\t<File>ConcreteSubject.h</File>\n\t<File>Obeserver.cpp</File>\n\t<File>Obeserver.h</File>\n\t<File>Subject.cpp</File>\n\t<File>Subject.h</File>\n<Attribute topline=\"7\" x=\"2\" y=\"16\">main.cpp</Attribute>\n<Attribute topline=\"10\" x=\"49\" y=\"24\">ConcreteObeserver.cpp</Attribute>\n<Attribute topline=\"10\" x=\"24\" y=\"14\">ConcreteObeserver.h</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"28\">ConcreteSubject.cpp</Attribute>\n<Attribute topline=\"4\" x=\"18\" y=\"17\">ConcreteSubject.h</Attribute>\n<Attribute topline=\"1\" x=\"2\" y=\"14\">Obeserver.cpp</Attribute>\n<Attribute topline=\"4\" x=\"14\" y=\"17\">Obeserver.h</Attribute>\n<Attribute topline=\"28\" x=\"2\" y=\"32\">Subject.cpp</Attribute>\n<Attribute topline=\"12\" x=\"1\" y=\"22\">Subject.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Obeserver/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Obeserver/main.cpp",
    "content": "#include <iostream>\n#include \"Subject.h\"\n#include \"Obeserver.h\"\n#include \"ConcreteObeserver.h\"\n#include \"ConcreteSubject.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tSubject * subject = new ConcreteSubject();\n\tObeserver * objA = new ConcreteObeserver(\"A\");\n\tObeserver * objB = new ConcreteObeserver(\"B\");\n\tsubject->attach(objA);\n\tsubject->attach(objB);\n\t\n\tsubject->setState(1);\n\tsubject->notify();\n\t\n\tcout << \"--------------------\" << endl;\n\tsubject->detach(objB);\n\tsubject->setState(2);\n\tsubject->notify();\n\t\n\tdelete subject;\n\tdelete objA;\n\tdelete objB;\n\t\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Proxy/Proxy.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Proxy.cpp\n//  Implementation of the Class Proxy\n//  Created on:      07-十月-2014 16:57:54\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Proxy.h\"\n#include <iostream>\nusing namespace std;\n\n\nProxy::Proxy(){\n\t//有人觉得 RealSubject对象的创建应该是在main中实现；我认为RealSubject应该\n\t//对用户是透明的，用户所面对的接口都是通过代理的；这样才是真正的代理； \n\tm_pRealSubject = new RealSubject();\n}\n\nProxy::~Proxy(){\n\tdelete m_pRealSubject;\n}\n\nvoid Proxy::afterRequest(){\n\tcout << \"Proxy::afterRequest\" << endl;\n}\n\n\nvoid Proxy::preRequest(){\n\tcout << \"Proxy::preRequest\" << endl;\n}\n\n\nvoid Proxy::request(){\n\tpreRequest();\n\tm_pRealSubject->request();\n\tafterRequest();\n}"
  },
  {
    "path": "code/Proxy/Proxy.h",
    "content": "///////////////////////////////////////////////////////////\n//  Proxy.h\n//  Implementation of the Class Proxy\n//  Created on:      07-十月-2014 16:57:54\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_56011290_0413_40c6_9132_63EE89B023FD__INCLUDED_)\n#define EA_56011290_0413_40c6_9132_63EE89B023FD__INCLUDED_\n\n#include \"RealSubject.h\"\n#include \"Subject.h\"\n\nclass Proxy : public Subject\n{\n\npublic:\n\tProxy();\n\tvirtual ~Proxy();\n\n\tvoid request();\n\nprivate:\n\tvoid afterRequest();\n\tvoid preRequest();\t\n\tRealSubject *m_pRealSubject;\n\n};\n#endif // !defined(EA_56011290_0413_40c6_9132_63EE89B023FD__INCLUDED_)\n"
  },
  {
    "path": "code/Proxy/RealSubject.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  RealSubject.cpp\n//  Implementation of the Class RealSubject\n//  Created on:      07-十月-2014 16:57:54\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"RealSubject.h\"\n#include <iostream>\nusing namespace std;\n\n\nRealSubject::RealSubject(){\n\n}\n\n\n\nRealSubject::~RealSubject(){\n\n}\n\nvoid RealSubject::request(){\n\tcout << \"RealSubject::request\" << endl;\n}"
  },
  {
    "path": "code/Proxy/RealSubject.h",
    "content": "///////////////////////////////////////////////////////////\n//  RealSubject.h\n//  Implementation of the Class RealSubject\n//  Created on:      07-十月-2014 16:57:54\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_5D2DD659_53C1_4a89_AFE3_762303A2AADD__INCLUDED_)\n#define EA_5D2DD659_53C1_4a89_AFE3_762303A2AADD__INCLUDED_\n\n#include \"Subject.h\"\n\nclass RealSubject : public Subject\n{\n\npublic:\n\tRealSubject();\n\tvirtual ~RealSubject();\n\n\tvoid request();\n\n};\n#endif // !defined(EA_5D2DD659_53C1_4a89_AFE3_762303A2AADD__INCLUDED_)\n"
  },
  {
    "path": "code/Proxy/Subject.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Subject.cpp\n//  Implementation of the Class Subject\n//  Created on:      07-十月-2014 16:57:55\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Subject.h\"\n\n\nSubject::Subject(){\n\n}\n\n\n\nSubject::~Subject(){\n\n}\n\n\n\n\n\nvoid Subject::request(){\n\n}"
  },
  {
    "path": "code/Proxy/Subject.h",
    "content": "///////////////////////////////////////////////////////////\n//  Subject.h\n//  Implementation of the Class Subject\n//  Created on:      07-十月-2014 16:57:55\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_5A04CB12_F247_4fe6_9A0C_64A15E180E2B__INCLUDED_)\n#define EA_5A04CB12_F247_4fe6_9A0C_64A15E180E2B__INCLUDED_\n\nclass Subject\n{\n\npublic:\n\tSubject();\n\tvirtual ~Subject();\n\n\tvirtual void request();\n\n};\n#endif // !defined(EA_5A04CB12_F247_4fe6_9A0C_64A15E180E2B__INCLUDED_)\n"
  },
  {
    "path": "code/Proxy/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Proxy.cpp</File>\n\t<File>Proxy.h</File>\n\t<File>RealSubject.cpp</File>\n\t<File>RealSubject.h</File>\n\t<File>Subject.cpp</File>\n\t<File>Subject.h</File>\n<Attribute topline=\"1\" x=\"18\" y=\"10\">main.cpp</Attribute>\n<Attribute topline=\"22\" x=\"15\" y=\"34\">Proxy.cpp</Attribute>\n<Attribute topline=\"10\" x=\"19\" y=\"19\">Proxy.h</Attribute>\n<Attribute topline=\"13\" x=\"2\" y=\"21\">RealSubject.cpp</Attribute>\n<Attribute topline=\"10\" x=\"10\" y=\"18\">Subject.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Proxy/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Proxy/main.cpp",
    "content": "#include <iostream>\n#include \"RealSubject.h\"\n#include \"Proxy.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tProxy proxy;\n\tproxy.request();\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/SimpleFactory/ConcreteProductA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProductA.cpp\n//  Implementation of the Class ConcreteProductA\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteProductA.h\"\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nConcreteProductA::ConcreteProductA(){\n\n}\n\n\n\nConcreteProductA::~ConcreteProductA(){\n\n}\n\nvoid ConcreteProductA::Use()\n{\n\tcout << \"use productB\" << endl;\t\n}"
  },
  {
    "path": "code/SimpleFactory/ConcreteProductA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProductA.h\n//  Implementation of the Class ConcreteProductA\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_7A08FFBB_5AD4_4f9c_AE53_998AC5E88F34__INCLUDED_)\n#define EA_7A08FFBB_5AD4_4f9c_AE53_998AC5E88F34__INCLUDED_\n\n#include \"Product.h\"\n\nclass ConcreteProductA : public Product\n{\n\npublic:\n\tConcreteProductA();\n\tvirtual ~ConcreteProductA();\n\t\n\tvirtual void Use();\n\n};\n#endif // !defined(EA_7A08FFBB_5AD4_4f9c_AE53_998AC5E88F34__INCLUDED_)\n"
  },
  {
    "path": "code/SimpleFactory/ConcreteProductB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProductB.cpp\n//  Implementation of the Class ConcreteProductB\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteProductB.h\"\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nConcreteProductB::ConcreteProductB(){\n\n}\n\n\n\nConcreteProductB::~ConcreteProductB(){\n\n}\n\nvoid ConcreteProductB::Use()\n{\n\tcout << \"use productB\" << endl;\t\n}"
  },
  {
    "path": "code/SimpleFactory/ConcreteProductB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteProductB.h\n//  Implementation of the Class ConcreteProductB\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_52558B6D_9609_4377_944C_C57B380F7229__INCLUDED_)\n#define EA_52558B6D_9609_4377_944C_C57B380F7229__INCLUDED_\n\n#include \"Product.h\"\n\nclass ConcreteProductB : public Product\n{\n\npublic:\n\tConcreteProductB();\n\tvirtual ~ConcreteProductB();\n\t\n\tvirtual void Use();\n\n};\n#endif // !defined(EA_52558B6D_9609_4377_944C_C57B380F7229__INCLUDED_)\n"
  },
  {
    "path": "code/SimpleFactory/Factory.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Factory.cpp\n//  Implementation of the Class Factory\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Factory.h\"\n#include \"ConcreteProductA.h\"\n#include \"ConcreteProductB.h\"\n\n\nFactory::Factory(){\n\n}\n\n\n\nFactory::~Factory(){\n\n}\n\n\nProduct* Factory::createProduct(string proname){\n\tif ( \"A\" == proname )\n\t{\n\t\treturn new ConcreteProductA();\n\t}\n\telse if(\"B\" == proname)\n\t{\n\t\treturn new ConcreteProductB();\n\t}\n\treturn  NULL;\n}"
  },
  {
    "path": "code/SimpleFactory/Factory.h",
    "content": "///////////////////////////////////////////////////////////\n//  Factory.h\n//  Implementation of the Class Factory\n//  Created on:      01-十月-2014 18:41:33\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_4C08AF19_2960_47a1_B769_9B60CFA50FE0__INCLUDED_)\n#define EA_4C08AF19_2960_47a1_B769_9B60CFA50FE0__INCLUDED_\n\n#include \"Product.h\"\n#include <string>\nusing namespace std;\n\nclass Factory\n{\n\npublic:\n\tFactory();\n\tvirtual ~Factory();\n\n\tstatic Product * createProduct(string proname);\n\n};\n#endif // !defined(EA_4C08AF19_2960_47a1_B769_9B60CFA50FE0__INCLUDED_)\n"
  },
  {
    "path": "code/SimpleFactory/Product.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Product.cpp\n//  Implementation of the Class Product\n//  Created on:      01-十月-2014 18:41:34\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Product.h\"\n\n\nProduct::Product(){\n\n}\n\n\n\nProduct::~Product(){\n\n}"
  },
  {
    "path": "code/SimpleFactory/Product.h",
    "content": "///////////////////////////////////////////////////////////\n//  Product.h\n//  Implementation of the Class Product\n//  Created on:      01-十月-2014 18:41:34\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_9126430A_5CDD_4424_AA90_549F255E0D2D__INCLUDED_)\n#define EA_9126430A_5CDD_4424_AA90_549F255E0D2D__INCLUDED_\n\nclass Product\n{\n\npublic:\n\tProduct();\n\tvirtual ~Product();\n\t\n\tvirtual void Use() = 0;\n\n};\n#endif // !defined(EA_9126430A_5CDD_4424_AA90_549F255E0D2D__INCLUDED_)\n"
  },
  {
    "path": "code/SimpleFactory/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n\t<File>ConcreteProductA.cpp</File>\n\t<File>ConcreteProductA.h</File>\n\t<File>ConcreteProductB.cpp</File>\n\t<File>ConcreteProductB.h</File>\n\t<File>Factory.cpp</File>\n\t<File>Factory.h</File>\n\t<File>Product.cpp</File>\n\t<File>Product.h</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n<Attribute topline=\"1\" x=\"1\" y=\"4\">main.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">ConcreteProductA.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">ConcreteProductA.h</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">ConcreteProductB.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">ConcreteProductB.h</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">Factory.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">Factory.h</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">Product.cpp</Attribute>\n<Attribute topline=\"1\" x=\"27\" y=\"5\">Product.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/SimpleFactory/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/SimpleFactory/main.cpp",
    "content": "#include <iostream>\n#include \"Factory.h\"\n#include \"Product.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tProduct * prod = Factory::createProduct(\"A\");\n\t\t\n\tprod->Use();\n\t\n\tdelete prod;\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Singleton/Singleton.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Singleton.cpp\n//  Implementation of the Class Singleton\n//  Created on:      02-十月-2014 17:24:46\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Singleton.h\"\n#include <iostream>\nusing namespace std;\n\nSingleton * Singleton::instance = NULL;\nSingleton::Singleton(){\n\n}\n\nSingleton::~Singleton(){\n\tdelete instance;\n}\n\nSingleton* Singleton::getInstance(){\n\tif (instance == NULL)\n\t{\n\t\tinstance = new Singleton();\n\t}\n\t\n\treturn  instance;\n}\n\n\nvoid Singleton::singletonOperation(){\n\tcout << \"singletonOperation\" << endl;\n}\n\n"
  },
  {
    "path": "code/Singleton/Singleton.h",
    "content": "///////////////////////////////////////////////////////////\n//  Singleton.h\n//  Implementation of the Class Singleton\n//  Created on:      02-十月-2014 17:24:46\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_5A12F734_0177_4e67_9117_77C147875E5A__INCLUDED_)\n#define EA_5A12F734_0177_4e67_9117_77C147875E5A__INCLUDED_\n\nclass Singleton\n{\n\npublic:\n\tvirtual ~Singleton();\n\tSingleton *m_Singleton;\n\n\tstatic Singleton* getInstance();\n\tvoid singletonOperation();\n\nprivate:\n\tstatic Singleton * instance;\n\n\tSingleton();\n\n};\n#endif // !defined(EA_5A12F734_0177_4e67_9117_77C147875E5A__INCLUDED_)\n"
  },
  {
    "path": "code/Singleton/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>Singleton.cpp</File>\n\t<File>Singleton.h</File>\n<Attribute topline=\"1\" x=\"28\" y=\"7\">main.cpp</Attribute>\n<Attribute topline=\"10\" x=\"1\" y=\"14\">Singleton.cpp</Attribute>\n<Attribute topline=\"10\" x=\"30\" y=\"22\">Singleton.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Singleton/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Singleton/main.cpp",
    "content": "#include <iostream>\n#include \"Singleton.h\"\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tSingleton * sg = Singleton::getInstance();\n\tsg->singletonOperation();\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/State/ConcreteStateA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStateA.cpp\n//  Implementation of the Class ConcreteStateA\n//  Created on:      09-十月-2014 17:20:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteStateA.h\"\n#include \"ConcreteStateB.h\"\n#include \"Context.h\"\n#include <iostream>\nusing namespace std;\n\nState * ConcreteStateA::m_pState = NULL;\nConcreteStateA::ConcreteStateA(){\n}\n\nConcreteStateA::~ConcreteStateA(){\n}\n\nState * ConcreteStateA::Instance()\n{\n\tif ( NULL == m_pState)\n\t{\n\t\tm_pState = new ConcreteStateA();\n\t}\n\treturn m_pState;\n}\n\nvoid ConcreteStateA::handle(Context * c){\n\tcout << \"doing something in State A.\\n done,change state to B\" << endl;\n\tc->changeState(ConcreteStateB::Instance());\n}"
  },
  {
    "path": "code/State/ConcreteStateA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStateA.h\n//  Implementation of the Class ConcreteStateA\n//  Created on:      09-十月-2014 17:20:58\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_84158F08_E96A_4bdb_89A1_4BE2E633C3EE__INCLUDED_)\n#define EA_84158F08_E96A_4bdb_89A1_4BE2E633C3EE__INCLUDED_\n\n#include \"State.h\"\n\nclass ConcreteStateA : public State\n{\n\npublic:\n\tvirtual ~ConcreteStateA();\n\t\n\tstatic State * Instance();\n\t\n\tvirtual void handle(Context * c);\n\nprivate:\n\tConcreteStateA();\n\tstatic State * m_pState;\n};\n#endif // !defined(EA_84158F08_E96A_4bdb_89A1_4BE2E633C3EE__INCLUDED_)\n"
  },
  {
    "path": "code/State/ConcreteStateB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStateB.cpp\n//  Implementation of the Class ConcreteStateB\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteStateB.h\"\n#include \"ConcreteStateA.h\"\n#include \"Context.h\"\n#include <iostream>\nusing namespace std;\n\nState * ConcreteStateB::m_pState = NULL;\nConcreteStateB::ConcreteStateB(){\n\n}\n\nState * ConcreteStateB::Instance()\n{\n\tif ( NULL == m_pState)\n\t{\n\t\tm_pState = new ConcreteStateB();\n\t}\n\treturn m_pState;\n}\n\nConcreteStateB::~ConcreteStateB(){\n\n}\n\nvoid ConcreteStateB::handle(Context * c){\n\tcout << \"doing something in State B.\\n done,change state to A\" << endl;\n\tc->changeState(ConcreteStateA::Instance());\n}\n\n"
  },
  {
    "path": "code/State/ConcreteStateB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStateB.h\n//  Implementation of the Class ConcreteStateB\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_A6960661_6D76_42cc_98F8_30BF46FBA4CC__INCLUDED_)\n#define EA_A6960661_6D76_42cc_98F8_30BF46FBA4CC__INCLUDED_\n\n#include \"State.h\"\n\nclass ConcreteStateB : public State\n{\n\npublic:\n\tstatic State * Instance();\n\t\n\tvirtual ~ConcreteStateB();\n\n\tvirtual void handle(Context * c);\nprivate:\n\tConcreteStateB();\n\tstatic State * m_pState;\n};\n#endif // !defined(EA_A6960661_6D76_42cc_98F8_30BF46FBA4CC__INCLUDED_)\n"
  },
  {
    "path": "code/State/Context.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Context.cpp\n//  Implementation of the Class Context\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Context.h\"\n#include \"ConcreteStateA.h\"\n\nContext::Context(){\n\t//default is a\n\tm_pState = ConcreteStateA::Instance();\n}\n\nContext::~Context(){\n}\n\nvoid Context::changeState(State * st){\n\tm_pState = st;\n}\n\nvoid Context::request(){\n\tm_pState->handle(this);\n}"
  },
  {
    "path": "code/State/Context.h",
    "content": "///////////////////////////////////////////////////////////\n//  Context.h\n//  Implementation of the Class Context\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_F245CF81_2A68_4461_B039_2B901BD5A126__INCLUDED_)\n#define EA_F245CF81_2A68_4461_B039_2B901BD5A126__INCLUDED_\n\n#include \"State.h\"\n\nclass Context\n{\n\npublic:\n\tContext();\n\tvirtual ~Context();\n\n\tvoid changeState(State * st);\n\tvoid request();\n\nprivate:\n\tState *m_pState;\n};\n#endif // !defined(EA_F245CF81_2A68_4461_B039_2B901BD5A126__INCLUDED_)\n"
  },
  {
    "path": "code/State/State.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  State.cpp\n//  Implementation of the Class State\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"State.h\"\n\n\nState::State(){\n\n}\n\n\n\nState::~State(){\n\n}\n\n\n\n\n\nvoid State::handle(Context * c){\n\n}"
  },
  {
    "path": "code/State/State.h",
    "content": "///////////////////////////////////////////////////////////\n//  State.h\n//  Implementation of the Class State\n//  Created on:      09-十月-2014 17:20:59\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_8AB26F2E_677E_42cb_98AF_64B7018246A2__INCLUDED_)\n#define EA_8AB26F2E_677E_42cb_98AF_64B7018246A2__INCLUDED_\n\nclass Context;\n\nclass State\n{\n\npublic:\n\tState();\n\tvirtual ~State();\n\n\tvirtual void handle(Context * c);\n\n};\n#endif // !defined(EA_8AB26F2E_677E_42cb_98AF_64B7018246A2__INCLUDED_)\n"
  },
  {
    "path": "code/State/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>ConcreteStateA.cpp</File>\n\t<File>ConcreteStateA.h</File>\n\t<File>ConcreteStateB.cpp</File>\n\t<File>ConcreteStateB.h</File>\n\t<File>Context.cpp</File>\n\t<File>Context.h</File>\n\t<File>State.cpp</File>\n\t<File>State.h</File>\n<Attribute topline=\"1\" x=\"6\" y=\"13\">main.cpp</Attribute>\n<Attribute topline=\"13\" x=\"3\" y=\"26\">ConcreteStateA.cpp</Attribute>\n<Attribute topline=\"7\" x=\"26\" y=\"25\">ConcreteStateA.h</Attribute>\n<Attribute topline=\"5\" x=\"1\" y=\"10\">ConcreteStateB.cpp</Attribute>\n<Attribute topline=\"4\" x=\"28\" y=\"17\">ConcreteStateB.h</Attribute>\n<Attribute topline=\"10\" x=\"27\" y=\"13\">Context.cpp</Attribute>\n<Attribute topline=\"13\" x=\"24\" y=\"26\">Context.h</Attribute>\n<Attribute topline=\"10\" x=\"1\" y=\"26\">State.cpp</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"11\">State.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/State/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/State/main.cpp",
    "content": "#include <iostream>\n#include \"Context.h\"\n#include \"ConcreteStateA.h\"\n#include \"ConcreteStateB.h\"\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tchar a = '0';\n\tif('0' == a)\n\t\tcout << \"yes\" << endl;\n\telse\n\t\tcout << \"no\" << endl;\n\t\n\tContext * c = new Context();\n\tc->request();\n\tc->request();\n\tc->request();\n\n\tdelete c;\n\treturn 0;\n}\n"
  },
  {
    "path": "code/Strategy/ConcreteStrategyA.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStrategyA.cpp\n//  Implementation of the Class ConcreteStrategyA\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteStrategyA.h\"\n#include <iostream>\nusing namespace std;\n\nConcreteStrategyA::ConcreteStrategyA(){\n\n}\n\nConcreteStrategyA::~ConcreteStrategyA(){\n\n}\n\nvoid ConcreteStrategyA::algorithm(){\n\tcout << \"use algorithm A\" << endl;\n}\n\n"
  },
  {
    "path": "code/Strategy/ConcreteStrategyA.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStrategyA.h\n//  Implementation of the Class ConcreteStrategyA\n//  Created on:      09-十月-2014 22:21:06\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_9B180F12_677B_4e9b_A243_1F5DAD93FE1D__INCLUDED_)\n#define EA_9B180F12_677B_4e9b_A243_1F5DAD93FE1D__INCLUDED_\n\n#include \"Strategy.h\"\n\nclass ConcreteStrategyA : public Strategy\n{\n\npublic:\n\tConcreteStrategyA();\n\tvirtual ~ConcreteStrategyA();\n\n\tvirtual void algorithm();\n\n};\n#endif // !defined(EA_9B180F12_677B_4e9b_A243_1F5DAD93FE1D__INCLUDED_)\n"
  },
  {
    "path": "code/Strategy/ConcreteStrategyB.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStrategyB.cpp\n//  Implementation of the Class ConcreteStrategyB\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"ConcreteStrategyB.h\"\n#include <iostream>\nusing namespace std;\n\n\n\nConcreteStrategyB::ConcreteStrategyB(){\n\n}\n\n\n\nConcreteStrategyB::~ConcreteStrategyB(){\n\n}\n\nvoid ConcreteStrategyB::algorithm(){\n\tcout << \"use algorithm B\" << endl;\n}\n\n"
  },
  {
    "path": "code/Strategy/ConcreteStrategyB.h",
    "content": "///////////////////////////////////////////////////////////\n//  ConcreteStrategyB.h\n//  Implementation of the Class ConcreteStrategyB\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_10F709BE_1F23_40c5_8872_397ACB1923A4__INCLUDED_)\n#define EA_10F709BE_1F23_40c5_8872_397ACB1923A4__INCLUDED_\n\n#include \"Strategy.h\"\n\nclass ConcreteStrategyB : public Strategy\n{\n\npublic:\n\tConcreteStrategyB();\n\tvirtual ~ConcreteStrategyB();\n\n\tvirtual void algorithm();\n\n};\n#endif // !defined(EA_10F709BE_1F23_40c5_8872_397ACB1923A4__INCLUDED_)\n"
  },
  {
    "path": "code/Strategy/Context.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Context.cpp\n//  Implementation of the Class Context\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Context.h\"\n\nContext::Context(){\n}\n\nContext::~Context(){\n}\n\nvoid Context::algorithm(){\n\tm_pStrategy->algorithm();\n}\n\nvoid Context::setStrategy(Strategy* st){\n\tm_pStrategy = st;\n}\n\n"
  },
  {
    "path": "code/Strategy/Context.h",
    "content": "///////////////////////////////////////////////////////////\n//  Context.h\n//  Implementation of the Class Context\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_0DA87730_4DEE_4392_9BAF_4AC64A8A07A4__INCLUDED_)\n#define EA_0DA87730_4DEE_4392_9BAF_4AC64A8A07A4__INCLUDED_\n\n#include \"Strategy.h\"\n\nclass Context\n{\n\npublic:\n\tContext();\n\tvirtual ~Context();\n\t\n\n\tvoid algorithm();\n\tvoid setStrategy(Strategy* st);\n\t\nprivate:\n\tStrategy *m_pStrategy;\n\n};\n#endif // !defined(EA_0DA87730_4DEE_4392_9BAF_4AC64A8A07A4__INCLUDED_)\n"
  },
  {
    "path": "code/Strategy/Strategy.cpp",
    "content": "///////////////////////////////////////////////////////////\n//  Strategy.cpp\n//  Implementation of the Class Strategy\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#include \"Strategy.h\"\n\n\nStrategy::Strategy(){\n\n}\n\n\n\nStrategy::~Strategy(){\n\n}\n\n\n\n\n\nvoid Strategy::algorithm(){\n\n}"
  },
  {
    "path": "code/Strategy/Strategy.h",
    "content": "///////////////////////////////////////////////////////////\n//  Strategy.h\n//  Implementation of the Class Strategy\n//  Created on:      09-十月-2014 22:21:07\n//  Original author: colin\n///////////////////////////////////////////////////////////\n\n#if !defined(EA_ADAF8456_60CF_4627_A2BE_C1A13D046954__INCLUDED_)\n#define EA_ADAF8456_60CF_4627_A2BE_C1A13D046954__INCLUDED_\n\nclass Strategy\n{\n\npublic:\n\tStrategy();\n\tvirtual ~Strategy();\n\n\tvirtual void algorithm();\n\n};\n#endif // !defined(EA_ADAF8456_60CF_4627_A2BE_C1A13D046954__INCLUDED_)\n"
  },
  {
    "path": "code/Strategy/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n\t<File>ConcreteStrategyA.cpp</File>\n\t<File>ConcreteStrategyA.h</File>\n\t<File>ConcreteStrategyB.cpp</File>\n\t<File>ConcreteStrategyB.h</File>\n\t<File>Context.cpp</File>\n\t<File>Context.h</File>\n\t<File>Strategy.cpp</File>\n\t<File>Strategy.h</File>\n<Attribute topline=\"22\" x=\"14\" y=\"28\">main.cpp</Attribute>\n<Attribute topline=\"7\" x=\"21\" y=\"20\">ConcreteStrategyA.cpp</Attribute>\n<Attribute topline=\"7\" x=\"7\" y=\"13\">ConcreteStrategyA.h</Attribute>\n<Attribute topline=\"13\" x=\"1\" y=\"28\">ConcreteStrategyB.cpp</Attribute>\n<Attribute topline=\"7\" x=\"2\" y=\"22\">Context.cpp</Attribute>\n<Attribute topline=\"10\" x=\"14\" y=\"13\">Context.h</Attribute>\n<Attribute topline=\"1\" x=\"1\" y=\"17\">Strategy.h</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/Strategy/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/Strategy/main.cpp",
    "content": "#include <iostream>\n#include \"Context.h\"\n#include \"ConcreteStrategyA.h\"\n#include \"ConcreteStrategyB.h\"\n#include \"Strategy.h\"\n#include <vector>\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\tStrategy * s1 = new ConcreteStrategyA();\n\tContext * cxt = new Context();\n\tcxt->setStrategy(s1);\n\tcxt->algorithm();\n\n\tStrategy *s2 = new ConcreteStrategyB();\n\tcxt->setStrategy(s2);\n\tcxt->algorithm();\n\t\n\tdelete s1;\n\tdelete s2;\n\t\n\tint rac1 = 0x1;\n\tint rac2 = 0x2;\n\tint rac3 = 0x4;\n\tint rac4 = 0x8;\n\t\n\tint i = 0xe;\n\tint j = 0x5;\n\n\tint r1 = i & rac1;\n\tint r2 = i & rac2;\n\tint r3 = i & rac3;\n\tint r4 = i & rac4;\n\t\n\tcout <<\"res:\" << r1 << \"/\" << r2 << \"/\" << r3 << \"/\" << r4 << endl;\n\t\n\treturn 0;\n}\n"
  },
  {
    "path": "code/main/main.cfp",
    "content": "<Project version=\"3.0\">\n<Name>main</Name>\n<Type>CUI</Type>\n<TargetName>main</TargetName>\n<TargetType>exe</TargetType>\n<Folder name=\"Source Files\">\n\t<File>main.cpp</File>\n</Folder>\n<Folder name=\"Header Files\">\n</Folder>\n<Folder name=\"Other Files\">\n</Folder>\n<Attribute topline=\"1\" x=\"1\" y=\"10\">main.cpp</Attribute>\n<FolderState>111</FolderState>\n<DefConfig>mingw5</DefConfig>\n<Builder name=\"mingw5\" type=\"MinGW\" version=\"1.0\" changed=\"1\">\n\t<TargetName>main</TargetName>\n\t<TargetType>exe</TargetType>\n\t<TargetDir>mingw5</TargetDir>\n\t<InterimDir>mingw5</InterimDir>\n\t<IncPaths endslash=\"0\">\n\t\t<Path>$(CFRoot)\\mingw\\include</Path>\n\t\t<Path>$(CFRoot)\\mingw\\include\\c++\\3.4.5</Path>\n\t\t<Path>$(CFRoot)\\mingw\\lib\\gcc\\mingw32\\3.4.5\\include</Path>\n\t\t<Pattern>*\\Include</Pattern>\n\t\t<Pattern>*\\Include\\G++</Pattern>\n\t\t<Pattern>*\\Include\\c++\\?.?.?</Pattern>\n\t</IncPaths>\n\t<LibPaths>\n\t\t<Path>$(CFRoot)\\mingw\\lib</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\lib</Path>\n\t\t<Pattern>*\\Lib</Pattern>\n\t</LibPaths>\n\t<ExePaths>\n\t\t<Path>$(CFRoot)\\mingw\\bin</Path>\n\t\t<Path>$(CFRoot)\\mingw\\mingw32\\bin</Path>\n\t\t<Pattern>*\\Bin</Pattern>\n\t</ExePaths>\n\t<AutoDetect>\n\t\t<Path>$(CFRoot)\\mingw</Path>\n\t\t<Path>C:\\MinGW</Path>\n\t\t<Path>D:\\MinGW</Path>\n\t\t<Path>E:\\MinGW</Path>\n\t\t<Path>F:\\MinGW</Path>\n\t\t<Path>G:\\MinGW</Path>\n\t\t<Path>C:\\Dev-Cpp</Path>\n\t\t<Path>D:\\Dev-Cpp</Path>\n\t\t<Path>E:\\Dev-Cpp</Path>\n\t\t<Path>F:\\Dev-Cpp</Path>\n\t\t<Path>G:\\Dev-Cpp</Path>\n\t\t<Reg>\\SOFTWARE\\Dev-C++|Install_Dir</Reg>\n\t\t<Reg>\\SOFTWARE\\CodeBlocks|Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1|Inno Setup: App Path</Reg>\n\t\t<Reg>\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW|InstallLocation</Reg>\n\t</AutoDetect>\n\t<CompilerOptions>\n\t\t<Category name=\"C++ Language\">\n\t\t\t<Option value=\"-fno-for-scope\" desc=\"Variables extends to the end of the for scope [-fno-for-scop]\"/>\n\t\t\t<Option value=\"-fno-default-inline\" desc=\"Do not assume `inline' inside a class scope [-fno-default-inline]\"/>\n\t\t\t<Option value=\"-Wold-style-cast\" desc=\"Warn if a C-style cast is used within a C++ program [-Wold-style-cast]\"/>\n\t\t</Category>\n\t\t<Category name=\"C Language\">\n\t\t\t<Option value=\"-std=c89\" desc=\"Compatible with standard iso9899:1990 (ISO C89) [-std=c89]\"/>\n\t\t\t<Option value=\"-std=c99\" desc=\"ISO9899:1999 (ISO C99, this standard may be not yet fully supported) [-std=c99]\"/>\n\t\t\t<Option value=\"-std=gnu99\" desc=\"ISO C99 plus GNU extensions [-std=gnu99]\"/>\n\t\t\t<Option value=\"-fno-asm\" desc=\"Do not recognize asm, inline or typeof as a keyword [-fno-asm]\"/>\n\t\t\t<Option value=\"-fallow-single-precision\" desc=\"Don't promote single precision math operations to double precision [-fallow-single-precision]\"/>\n\t\t</Category>\n\t\t<Category name=\"Debugging\">\n\t\t\t<Option value=\"-g\" desc=\"Produce debugging information for use by GDB [-g]\"/>\n\t\t</Category>\n\t\t<Category name=\"Warnings\">\n\t\t\t<Option value=\"-w\" desc=\"Inhibit all warning messages [-w]\"/>\n\t\t\t<Option value=\"-Wall\" desc=\"Enable all compiler warnings [-Wall]\"/>\n\t\t\t<Option value=\"-Werror\" desc=\"Make all warnings into errors [-Werror]\"/>\n\t\t\t<Option value=\"-Wformat\" desc=\"Check calls to printf and scanf, etc. [-Wformat]\"/>\n\t\t\t<Option value=\"-Wmain\" desc=\"Warn if the type of `main' is suspicious [-Wmain]\"/>\n\t\t\t<Option value=\"-Wreturn-type\" desc=\"Warn if a function is defined with a return-type that defaults to int [-Wreturn-type]\"/>\n\t\t\t<Option value=\"-Wunused\" desc=\"Combine all the `-Wunused' options [-Wunused]\"/>\n\t\t\t<Option value=\"-Wfloat-equal\" desc=\"Warn if floating point values used in equality comparisons [-Wfloat-equal]\"/>\n\t\t\t<Option value=\"-Wunreachable-code\" desc=\"Warn if there is code never be executed [-Wunreachable-code]\"/>\n\t\t</Category>\n\t\t<Category name=\"Optimization\">\n\t\t\t<Option value=\"-O\" desc=\"Optimize (for speed) [-O]\"/>\n\t\t\t<Option value=\"-O1\" desc=\"Optimize more (for speed) [-O1]\"/>\n\t\t\t<Option value=\"-O2\" desc=\"Optimize even more (for speed) [-O2]\"/>\n\t\t\t<Option value=\"-O3\" desc=\"Optimize fully (for speed) [-O3]\"/>\n\t\t\t<Option value=\"-Os\" desc=\"Optimize (for size) [-Os]\"/>\n\t\t</Category>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default>-g -DDEBUG</Default>\n\t\t\t<User>-g -DDEBUG</User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-O2</Default>\n\t\t\t<User>-O2</User>\n\t\t</RawOptionsRelease>\n\t</CompilerOptions>\n\t<LinkerOptions>\n\t\t<LibsDebug enabled=\"1\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsDebug>\n\t\t<LibsRelease enabled=\"0\">\n\t\t\t<Default>\n\t\t\t</Default>\n\t\t\t<User>\n\t\t\t</User>\n\t\t</LibsRelease>\n\t\t<RawOptionsDebug enabled=\"1\">\n\t\t\t<Default></Default>\n\t\t\t<User></User>\n\t\t</RawOptionsDebug>\n\t\t<RawOptionsRelease enabled=\"0\">\n\t\t\t<Default>-s</Default>\n\t\t\t<User>-s</User>\n\t\t</RawOptionsRelease>\n\t</LinkerOptions>\n\t<Configs>\n\t\t<BuildLog enabled=\"0\">$(CFRoot)\\Build.log</BuildLog>\n\t\t<LibExt>lib;a</LibExt>\n\t\t<ObjExt>o;obj</ObjExt>\n\t\t<ResExt>res</ResExt>\n\t</Configs>\n\t<Commands msghandler=\"Gcc.mhr\">\n\t\t<Command name=\"C Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">gcc.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"C++ Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(FileName)&quot; -c -o &quot;$(Path)$(Name).o&quot; $(CompilerOptions) -I$(IncPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).o</Target>\n\t\t\t<TargetType>o</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(CUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>cui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker(GUI)\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">$(ProjectFiles) -l$(Libs) -o &quot;$(Target)&quot; $(LinkerOptions) -mwindows -L$(LibPaths) -B$(ExePaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>gui</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for DLL\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">g++.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-shared -Wl,--output-def=&quot;$(Path)$(Name).def&quot; -Wl,--out-implib=&quot;$(Path)$(Name).lib&quot; -Wl,--dll -L$(LibPaths) $(ProjectFiles) -o &quot;$(Target)&quot; $(LinkerOptions) -l$(Libs)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj;a;lib;res;def</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>dll</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Linker for Lib\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">ar.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-r &quot;$(Target)&quot; $(ProjectFiles)</Parameter>\n\t\t\t<FileExt enabled=\"1\">o;obj</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType>lib</TargetType>\n\t\t\t<CurrentDir>$(ProjectPath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Linking...#81002</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Resource Compiler\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"1\">windres.exe</Program>\n\t\t\t<Parameter enabled=\"1\">-O coff -i &quot;$(ShortFileName)&quot; -o &quot;$(Path)$(Name).res&quot; --include-dir=$(ShortPath) --include-dir=$(IncPaths)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(PATH)$(NAME).res</Target>\n\t\t\t<TargetType>res</TargetType>\n\t\t\t<CurrentDir>$(FilePath)</CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>Compiling $(FILENAME)...#81001</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Debugger\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">gdb.exe</Program>\n\t\t\t<Parameter enabled=\"0\">gdebug.dll</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81003</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run Exe\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(Target)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">exe</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run DLL\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"1\">dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Run\" io=\"0\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">$(HostApp)</Program>\n\t\t\t<Parameter enabled=\"0\">$(Parameters)</Parameter>\n\t\t\t<FileExt enabled=\"0\">:exe;dll</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID>#81004</MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Objects\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).o&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">c;cpp;cxx;c++;cc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Resource\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"1\">&quot;$(Path)$(Name).res&quot; $(FileName)</Parameter>\n\t\t\t<FileExt enabled=\"1\">rc</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Io\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Path)$(Name).o&quot; -silent</Parameter>\n\t\t\t<FileExt enabled=\"0\">*.*</FileExt>\n\t\t\t<Target>$(Target)</Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t\t<Command name=\"Clean Target\" io=\"1\" rdos=\"0\" sys=\"0\">\n\t\t\t<Program enabled=\"0\">fdel.exe</Program>\n\t\t\t<Parameter enabled=\"0\">&quot;$(Target)&quot;</Parameter>\n\t\t\t<FileExt enabled=\"1\">*.*</FileExt>\n\t\t\t<Target></Target>\n\t\t\t<TargetType></TargetType>\n\t\t\t<CurrentDir></CurrentDir>\n\t\t\t<EnvVar></EnvVar>\n\t\t\t<MsgID></MsgID>\n\t\t</Command>\n\t</Commands>\n\t<Actions>\n\t\t<Action name=\"Compile\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81005</MsgID>\n\t\t\t<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Build\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81007</MsgID>\n\t\t\t<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Make\" depend=\"1\">\n\t\t\t<File>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"C Compiler\"\"C++ Compiler\"\"Resource Compiler\"</Command>\n\t\t\t\t<Command>\"Linker(CUI)\"\"Linker(GUI)\"\"Linker for DLL\"\"Linker for Lib\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\\nGenerated $(Target)#81009</MsgID>\n\t\t\t<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Run\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Run Exe\"\"Run DLL\"\"Run\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81011</MsgID>\n\t\t\t<ErrMsgID>#81012</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Debug\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Action>\"Make\"</Action>\n\t\t\t\t<Command>\"Debugger\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>#81013</MsgID>\n\t\t\t<ErrMsgID>#81014</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t\t<Action name=\"Clean\" depend=\"0\">\n\t\t\t<File>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</File>\n\t\t\t<Project>\n\t\t\t\t<Command>\"Clean Objects\"\"Clean Resource\"\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Io\"</Command>\n\t\t\t\t<Command>\"Clean Target\"</Command>\n\t\t\t</Project>\n\t\t\t<MsgID>Complete Clean $(TargetName)#81015</MsgID>\n\t\t\t<ErrMsgID>Clean $(TargetName) error#81016</ErrMsgID>\n\t\t\t<PreAction></PreAction>\n\t\t\t<PostAction con=\"0\"></PostAction>\n\t\t</Action>\n\t</Actions>\n</Builder>\n</Project>\n"
  },
  {
    "path": "code/main/main.cfpg",
    "content": "<Projects version=\"2.0\">\n\t<Project active=\"1\">main.cfp</Project>\n\t<File active=\"1\">main.cpp</File>\n</Projects>\n"
  },
  {
    "path": "code/main/main.cpp",
    "content": "#include <iostream>\n\nusing namespace std;\n\nint main(int argc, char *argv[])\n{\n\treturn 0;\n}\n"
  },
  {
    "path": "conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# book documentation build configuration file, created by\n# sphinx-quickstart on Thu Aug 14 09:52:32 2014.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nimport os\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#sys.path.insert(0, os.path.abspath('.'))\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.todo',\n    'sphinx.ext.ifconfig',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = u'Graphic Design Patterns'\ncopyright = u'2014, Colin http://blog.me115.com'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = '0.1'\n# The full version, including alpha/beta/rc tags.\nrelease = '0.1'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n#keep_warnings = False\n\n\n# -- Options for HTML output ----------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n# html_theme = 'default'\nhtml_theme = 'sphinx_rtd_theme'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\nhtml_theme_path = ['.']\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\nhtml_title = u'Graphic Design Patterns'\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n#html_extra_path = []\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\n#html_domain_indices = True\n\n# If false, no index is generated.\n#html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'bookdoc'\n\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n# The paper size ('letterpaper' or 'a4paper').\n#'papersize': 'letterpaper',\n\n# The font size ('10pt', '11pt' or '12pt').\n#'pointsize': '10pt',\n\n# Additional stuff for the LaTeX preamble.\n#'preamble': '',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n  ('index', 'book.tex', u'book Documentation',\n   u'colin', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'book', u'book Documentation',\n     [u'colin'], 1)\n]\n\n# If true, show URL addresses after external links.\n#man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n  ('index', 'book', u'book Documentation',\n   u'colin', 'book', 'One line description of project.',\n   'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#texinfo_appendices = []\n\n# If false, no module index is generated.\n#texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n#texinfo_no_detailmenu = False\n\n\n# -- Options for Epub output ----------------------------------------------\n\n# Bibliographic Dublin Core info.\nepub_title = u'book'\nepub_author = u'colin'\nepub_publisher = u'colin'\nepub_copyright = u'2014, colin'\n\n# The basename for the epub file. It defaults to the project name.\n#epub_basename = u'book'\n\n# The HTML theme for the epub output. Since the default themes are not optimized\n# for small screen space, using the same theme for HTML and epub output is\n# usually not wise. This defaults to 'epub', a theme designed to save visual\n# space.\n#epub_theme = 'epub'\n\n# The language of the text. It defaults to the language option\n# or en if the language is not set.\n#epub_language = ''\n\n# The scheme of the identifier. Typical schemes are ISBN or URL.\n#epub_scheme = ''\n\n# The unique identifier of the text. This can be a ISBN number\n# or the project homepage.\n#epub_identifier = ''\n\n# A unique identification for the text.\n#epub_uid = ''\n\n# A tuple containing the cover image and cover page html template filenames.\n#epub_cover = ()\n\n# A sequence of (type, uri, title) tuples for the guide element of content.opf.\n#epub_guide = ()\n\n# HTML files that should be inserted before the pages created by sphinx.\n# The format is a list of tuples containing the path and title.\n#epub_pre_files = []\n\n# HTML files shat should be inserted after the pages created by sphinx.\n# The format is a list of tuples containing the path and title.\n#epub_post_files = []\n\n# A list of files that should not be packed into the epub file.\nepub_exclude_files = ['search.html']\n\n# The depth of the table of contents in toc.ncx.\n#epub_tocdepth = 3\n\n# Allow duplicate toc entries.\n#epub_tocdup = True\n\n# Choose between 'default' and 'includehidden'.\n#epub_tocscope = 'default'\n\n# Fix unsupported image types using the PIL.\n#epub_fix_images = False\n\n# Scale large images.\n#epub_max_image_width = 0\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#epub_show_urls = 'inline'\n\n# If false, no index is generated.\n#epub_use_index = True\n\n\n# Example configuration for intersphinx: refer to the Python standard library.\nintersphinx_mapping = {'http://docs.python.org/': None}\n"
  },
  {
    "path": "creational_patterns/abstract_factory.rst",
    "content": ".. abstract_factory::\n\n抽象工厂模式(Abstract Factory)\n========================================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n- 在工厂方法模式中具体工厂负责生产具体的产品，每一个具体工厂对应一种具体产品，工厂方法也具有唯一性，一般情况下，一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象，而不是单一的产品对象。\n\n    为了更清晰地理解工厂方法模式，需要先引入两个概念：\n\n    *  **产品等级结构** ：产品等级结构即产品的继承结构，如一个抽象类是电视机，其子类有海尔电视机、海信电视机、TCL电视机，则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构，抽象电视机是父类，而具体品牌的电视机是其子类。\n    * **产品族** ：在抽象工厂模式中，产品族是指由同一个工厂生产的，位于不同产品等级结构中的一组产品，如海尔电器工厂生产的海尔电视机、海尔电冰箱，海尔电视机位于电视机产品等级结构中，海尔电冰箱位于电冰箱产品等级结构中。\n\n- 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象，而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。\n- 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。\n- 抽象工厂模式与工厂方法模式最大的区别在于，工厂方法模式针对的是一个产品等级结构，而抽象工厂模式则需要面对多个产品等级结构，一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 。当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时，抽象工厂模式比工厂方法模式更为简单、有效率。\n\n\n模式定义\n--------------------\n抽象工厂模式(Abstract Factory Pattern)：提供一个创建一系列相关或相互依赖对象的接口，而无须指定它们具体的类。抽象工厂模式又称为Kit模式，属于对象创建型模式。\n\n\n模式结构\n--------------------\n抽象工厂模式包含如下角色：\n\n- AbstractFactory：抽象工厂\n- ConcreteFactory：具体工厂\n- AbstractProduct：抽象产品\n- Product：具体产品\n\n.. image:: /_static/AbatractFactory.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_AbatractFactory.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/AbstractFactory/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-21\n   :emphasize-lines: 11-21\n\n.. literalinclude:: /code/AbstractFactory/ConcreteFactory1.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-10,21-28\n   :emphasize-lines: 11-18\n\n.. literalinclude:: /code/AbstractFactory/ProductA1.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-10,21-23\n   :emphasize-lines: 11-13\n\n运行结果：\n\n.. image:: /_static/AbatractFactory_run.jpg\n\n\n模式分析\n--------------------\n\n实例\n--------------------\n\n优点\n--------------------\n- 抽象工厂模式隔离了具体类的生成，使得客户并不需要知道什么被创建。由于这种隔离，更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口，因此只需改变具体工厂的实例，就可以在某种程度上改变整个软件系统的行为。另外，应用抽象工厂模式可以实现高内聚低耦合的设计目的，因此抽象工厂模式得到了广泛的应用。\n- 当一个产品族中的多个对象被设计成一起工作时，它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说，是一种非常实用的设计模式。\n- 增加新的具体工厂和产品族很方便，无须修改已有系统，符合“开闭原则”。\n\n\n缺点\n--------------------\n- 在添加新的产品对象时，难以扩展抽象工厂来生产新种类的产品，这是因为在抽象工厂角色中规定了所有可能被创建的产品集合，要支持新种类的产品就意味着要对该接口进行扩展，而这将涉及到对抽象工厂角色及其所有子类的修改，显然会带来较大的不便。\n- 开闭原则的倾斜性（增加新的工厂和产品族容易，增加新的产品等级结构麻烦）。\n\n\n适用环境\n--------------------\n在以下情况下可以使用抽象工厂模式：\n\n- 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节，这对于所有类型的工厂模式都是重要的。\n- 系统中有多于一个的产品族，而每次只使用其中某一产品族。\n- 属于同一个产品族的产品将在一起使用，这一约束必须在系统的设计中体现出来。\n- 系统提供一个产品类的库，所有的产品以同样的接口出现，从而使客户端不依赖于具体实现。\n\n\n模式应用\n--------------------\n在很多软件系统中需要更换界面主题，要求界面中的按钮、文本框、背景色等一起发生改变时，可以使用抽象工厂模式进行设计。\n\n\n模式扩展\n--------------------\n“开闭原则”的倾斜性\n^^^^^^^^^^^^^^^^^^^^^\n\n- “开闭原则”要求系统对扩展开放，对修改封闭，通过扩展达到增强其功能的目的。对于涉及到多个产品族与多个产品等级结构的系统，其功能增强包括两方面：\n    (1) 增加产品族：对于增加新的产品族，工厂方法模式很好的支持了“开闭原则”，对于新增加的产品族，只需要对应增加一个新的具体工厂即可，对已有代码无须做任何修改。\n    (2) 增加新的产品等级结构：对于增加新的产品等级结构，需要修改所有的工厂角色，包括抽象工厂类，在所有的工厂类中都需要增加生产新产品的方法，不能很好地支持“开闭原则”。\n- 抽象工厂模式的这种性质称为“开闭原则”的倾斜性，抽象工厂模式以一种倾斜的方式支持增加新的产品，它为新产品族的增加提供方便，但不能为新的产品等级结构的增加提供这样的方便。\n\n工厂模式的退化\n^^^^^^^^^^^^^^^^^^^^\n- 当抽象工厂模式中每一个具体工厂类只创建一个产品对象，也就是只存在一个产品等级结构时，抽象工厂模式退化成工厂方法模式；当工厂方法模式中抽象工厂与具体工厂合并，提供一个统一的工厂来创建产品对象，并将创建对象的工厂方法设计为静态方法时，工厂方法模式退化成简单工厂模式。\n\n总结\n--------------------\n- 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口，而无须指定它们具体的类。抽象工厂模式又称为Kit模式，属于对象创建型模式。\n- 抽象工厂模式包含四个角色：抽象工厂用于声明生成抽象产品的方法；具体工厂实现了抽象工厂声明的生成抽象产品的方法，生成一组具体产品，这些产品构成了一个产品族，每一个产品都位于某个产品等级结构中；抽象产品为每种产品声明接口，在抽象产品中定义了产品的抽象业务方法；具体产品定义具体工厂生产的具体产品对象，实现抽象产品接口中定义的业务方法。\n- 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式与工厂方法模式最大的区别在于，工厂方法模式针对的是一个产品等级结构，而抽象工厂模式则需要面对多个产品等级结构。\n- 抽象工厂模式的主要优点是隔离了具体类的生成，使得客户并不需要知道什么被创建，而且每次可以通过具体工厂类创建一个产品族中的多个对象，增加或者替换产品族比较方便，增加新的具体工厂和产品族很方便；主要缺点在于增加新的产品等级结构很复杂，需要修改抽象工厂和所有的具体工厂类，对“开闭原则”的支持呈现倾斜性。\n- 抽象工厂模式适用情况包括：一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节；系统中有多于一个的产品族，而每次只使用其中某一产品族；属于同一个产品族的产品将在一起使用；系统提供一个产品类的库，所有的产品以同样的接口出现，从而使客户端不依赖于具体实现。\n\n\n"
  },
  {
    "path": "creational_patterns/builder.rst",
    "content": ".. _builder:\n\n建造者模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n无论是在现实世界中还是在软件系统中，都存在一些复杂的对象，它们拥有多个组成部分，如汽车，它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言，无须知道这些部件的装配细节，也几乎不会使用单独某个部件，而是使用一辆完整的汽车，可以通过建造者模式对其进行设计与描述，建造者模式可以将部件和其组装过程分开，一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象，而无须知道其内部的具体构造细节。\n\n在软件开发中，也存在大量类似汽车一样的复杂对象，它们拥有一系列成员属性，这些成员属性中有些是引用类型的成员对象。而且在这些复杂对象中，还可能存在一些限制条件，如某些属性没有赋值则复杂对象不能作为一个完整的产品使用；有些属性的赋值必须按照某个顺序，一个属性没有赋值之前，另一个属性可能无法赋值等。\n\n复杂对象相当于一辆有待建造的汽车，而对象的属性相当于汽车的部件，建造产品的过程就相当于组合部件的过程。由于组合部件的过程很复杂，因此，这些部件的组合过程往往被“外部化”到一个称作建造者的对象里，建造者返还给客户端的是一个已经建造完毕的完整产品对象，而用户无须关心该对象所包含的属性以及它们的组装方式，这就是建造者模式的模式动机。\n\n\n\n模式定义\n--------------------\n造者模式(Builder Pattern)：将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。\n\n建造者模式是一步一步创建一个复杂的对象，它允许用户只通过指定复杂对象的类型和内容就可以构建它们，用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同，建造者模式又可以称为生成器模式。\n\n\n模式结构\n--------------------\n建造者模式包含如下角色：\n\n- Builder：抽象建造者\n- ConcreteBuilder：具体建造者\n- Director：指挥者\n- Product：产品角色\n\n.. image:: /_static/Builder.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Builder.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Builder/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 11-15\n\n.. literalinclude:: /code/Builder/ConcreteBuilder.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 21-33\n\n.. literalinclude:: /code/Builder/Director.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 16-21\n\n运行结果：\n\n.. image:: /_static/Builder_run.jpg\n\n\n模式分析\n--------------------\n抽象建造者类中定义了产品的创建方法和返回方法;\n\n建造者模式的结构中还引入了一个指挥者类Director，该类的作用主要有两个：一方面它隔离了客户与生产过程；另一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程，客户端只需要知道具体建造者的类型，即可通过指挥者类调用建造者的相关方法，返回一个完整的产品对象\n\n在客户端代码中，无须关心产品对象的具体组装过程，只需确定具体建造者的类型即可，建造者模式将复杂对象的构建与对象的表现分离开来，这样使得同样的构建过程可以创建出不同的表现。\n\n\n实例\n--------------------\n实例：KFC套餐\n\n建造者模式可以用于描述KFC如何创建套餐：套餐是一个复杂对象，它一般包含主食（如汉堡、鸡肉卷等）和饮料（如果汁、\n可乐等）等组成部分，不同的套餐有不同的组成部分，而KFC的服务员可以根据顾客的要求，一步一步装配这些组成部分，构造一份完整的套餐，然后返回给顾客。\n\n.. image:: /_static/KFCBuilder.jpg\n\n优点\n--------------------\n- 在建造者模式中， **客户端不必知道产品内部组成的细节，将产品本身与产品的创建过程解耦，使得相同的创建过程可以创建不同的产品对象。** \n- 每一个具体建造者都相对独立，而与其他的具体建造者无关，因此可以很方便地替换具体建造者或增加新的具体建造者， **用户使用不同的具体建造者即可得到不同的产品对象** 。\n- **可以更加精细地控制产品的创建过程** 。将复杂产品的创建步骤分解在不同的方法中，使得创建过程更加清晰，也更方便使用程序来控制创建过程。\n-  **增加新的具体建造者无须修改原有类库的代码，指挥者类针对抽象建造者类编程，系统扩展方便，符合“开闭原则”。** \n\n\n\n缺点\n--------------------\n- 建造者模式所创建的产品一般具有较多的共同点，其组成部分相似，如果产品之间的差异性很大，则不适合使用建造者模式，因此其使用范围受到一定的限制。\n- 如果产品的内部变化复杂，可能会导致需要定义很多具体建造者类来实现这种变化，导致系统变得很庞大。\n\n\n适用环境\n--------------------\n在以下情况下可以使用建造者模式：\n\n- 需要生成的产品对象有复杂的内部结构，这些产品对象通常包含多个成员属性。\n- 需要生成的产品对象的属性相互依赖，需要指定其生成顺序。\n- 对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类，将创建过程封装在指挥者类中，而不在建造者类中。\n- 隔离复杂对象的创建和使用，并使得相同的创建过程可以创建不同的产品。\n\n\n模式应用\n--------------------\n在很多游戏软件中，地图包括天空、地面、背景等组成部分，人物角色包括人体、服装、装备等组成部分，可以使用建造者模式对其进行设计，通过不同的具体建造者创建不同类型的地图或人物。\n\n\n模式扩展\n--------------------\n建造者模式的简化:\n\n- 省略抽象建造者角色：如果系统中只需要一个具体建造者的话，可以省略掉抽象建造者。\n- 省略指挥者角色：在具体建造者只有一个的情况下，如果抽象建造者角色已经被省略掉，那么还可以省略指挥者角色，让\nBuilder角色扮演指挥者与建造者双重角色。\n\n建造者模式与抽象工厂模式的比较:\n\n- 与抽象工厂模式相比， **建造者模式返回一个组装好的完整产品** ，而 **抽象工厂模式返回一系列相关的产品，这些产品位于不同的产品等级结构，构成了一个产品族。** \n- 在抽象工厂模式中，客户端实例化工厂类，然后调用工厂方法获取所需产品对象，而在建造者模式中，客户端可以不直接调用建造者的相关方法，而是通过指挥者类来指导如何生成对象，包括对象的组装过程和建造步骤，它侧重于一步步构造一个复杂对象，返回一个完整的对象。\n- 如果将抽象工厂模式看成 **汽车配件生产工厂** ，生产一个产品族的产品，那么建造者模式就是一个 **汽车组装工厂** ，通过对部件的组装可以返回一辆完整的汽车。\n\n\n总结\n--------------------\n- 建造者模式将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象，它允许用户只通过指定复杂对象的类型和内容就可以构建它们，用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。\n- 建造者模式包含如下四个角色：抽象建造者为创建一个产品对象的各个部件指定抽象接口；具体建造者实现了抽象建造者接口，实现各个部件的构造和装配方法，定义并明确它所创建的复杂对象，也可以提供一个方法返回创建好的复杂产品对象；产品角色是被构建的复杂对象，包含多个组成部件；指挥者负责安排复杂对象的建造次序，指挥者与抽象建造者之间存在关联关系，可以在其construct()建造方法中调用建造者对象的部件构造与装配方法，完成复杂对象的建造\n- 在建造者模式的结构中引入了一个指挥者类，该类的作用主要有两个：一方面它隔离了客户与生产过程；另一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程，客户端只需要知道具体建造者的类型，即可通过指挥者类调用建造者的相关方法，返回一个完整的产品对象。\n- 建造者模式的主要优点在于客户端不必知道产品内部组成的细节，将产品本身与产品的创建过程解耦，使得相同的创建过程可以创建不同的产品对象，每一个具体建造者都相对独立，而与其他的具体建造者无关，因此可以很方便地替换具体建造者或增加新的具体建造者，符合“开闭原则”，还可以更加精细地控制产品的创建过程；其主要缺点在于由于建造者模式所创建的产品一般具有较多的共同点，其组成部分相似，因此其使用范围受到一定的限制，如果产品的内部变化复杂，可能会导致需要定义很多具体建造者类来实现这种变化，导致系统变得很庞大。\n- 建造者模式适用情况包括：需要生成的产品对象有复杂的内部结构，这些产品对象通常包含多个成员属性；需要生成的产品对象的属性相互依赖，需要指定其生成顺序；对象的创建过程独立于创建该对象的类；隔离复杂对象的创建和使用，并使得相同的创建过程可以创建不同类型的产品。\n\n\n"
  },
  {
    "path": "creational_patterns/creational.rst",
    "content": ".. _creational:\n\n创建型模式\n====================\n\n创建型模式(Creational Pattern)对类的实例化过程进行了抽象，能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰，外界对于这些对象只需要知道它们共同的接口，而不清楚其具体的实现细节，使整个系统的设计更加符合单一职责原则。\n\n创建型模式在创建什么(What)，由谁创建(Who)，何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节，通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。\n\n**包含模式**\n\n- 简单工厂模式（Simple Factory）\n    重要程度：4 （5为满分）\n- 工厂方法模式（Factory Method）\n    重要程度：5\n- 抽象工厂模式（Abstract Factory）\n    重要程度：5\n- 建造者模式（Builder）\n    重要程度：2\n- 原型模式（Prototype）\n    重要程度：3\n- 单例模式（Singleton）\n    重要程度：4\n\n\n**目录**\n\n.. toctree::\n   :maxdepth: 2\n   :numbered: 2\n    \n   simple_factory\n   factory_method\n   abstract_factory\n   builder\n   singleton\n\n\n"
  },
  {
    "path": "creational_patterns/factory_method.rst",
    "content": ".. _factory_method:\n\n工厂方法模式(Factory Method Pattern)\n========================================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n现在对该系统进行修改，不再设计一个按钮工厂类来统一负责所有产品的创建，而是将具体按钮的创建过程交给专门的工厂子类去完成，我们先定义一个抽象的按钮工厂类，再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等，它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品，如果出现新的按钮类型，只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例，这一特点无疑使得工厂方法模式具有超越简单工厂模式的优越性，更加符合“开闭原则”。\n\n模式定义\n--------------------\n工厂方法模式(Factory Method Pattern)又称为工厂模式，也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式，它属于类创建型模式。在工厂方法模式中，工厂父类负责定义创建产品对象的公共接口，而工厂子类则负责生成具体的产品对象，这样做的目的是将产品类的实例化操作延迟到工厂子类中完成，即通过工厂子类来确定究竟应该实例化哪一个具体产品类。\n\n模式结构\n--------------------\n工厂方法模式包含如下角色：\n\n- Product：抽象产品\n- ConcreteProduct：具体产品\n- Factory：抽象工厂\n- ConcreteFactory：具体工厂\n\n.. image:: /_static/FactoryMethod.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_FactoryMethod.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/FactoryMethod/ConcreteFactory.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-10,20-\n\n.. literalinclude:: /code/FactoryMethod/main.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 9-11\n   \n模式分析\n--------------------\n工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性，工厂方法模式保持了简单工厂模式的优点，而且克服了它的缺点。在工厂方法模式中，核心的工厂类不再负责所有产品的创建，而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口，而不负责哪一个产品类被实例化这种细节，这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。\n\n\n实例\n--------------------\n日志记录器\n\n某系统日志记录器要求支持多种日志记录方式，如文件记录、数据库记录等，且用户可以根据要求动态选择日志记录方式，\n现使用工厂方法模式设计该系统。\n\n结构图：\n\n.. image:: /_static/loger.jpg\n\n时序图：\n\n.. image:: /_static/seq_loger.jpg\n\n\n工厂方法模式的优点\n--------------------\n- 在工厂方法模式中，工厂方法用来创建客户所需要的产品，同时还向客户隐藏了哪种具体产品类将被实例化这一细节，用户只需要关心所需产品对应的工厂，无须关心创建细节，甚至无须知道具体产品类的类名。\n- 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象，而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式，是因为所有的具体工厂类都具有同一抽象父类。\n- 使用工厂方法模式的另一个优点是在系统中加入新产品时，无须修改抽象工厂和抽象产品提供的接口，无须修改客户端，也无须修改其他的具体工厂和具体产品，而只要添加一个具体工厂和具体产品就可以了。这样，系统的可扩展性也就变得非常好，完全符合“开闭原则”。\n\n\n工厂方法模式的缺点\n--------------------\n- 在添加新产品时，需要编写新的具体产品类，而且还要提供与之对应的具体工厂类，系统中类的个数将成对增加，在一定程度上增加了系统的复杂度，有更多的类需要编译和运行，会给系统带来一些额外的开销。\n- 由于考虑到系统的可扩展性，需要引入抽象层，在客户端代码中均使用抽象层进行定义，增加了系统的抽象性和理解难度，且在实现时可能需要用到DOM、反射等技术，增加了系统的实现难度。\n\n适用环境\n--------------------\n在以下情况下可以使用工厂方法模式：\n\n- 一个类不知道它所需要的对象的类：在工厂方法模式中，客户端不需要知道具体产品类的类名，只需要知道所对应的工厂即可，具体的产品对象由具体工厂类创建；客户端需要知道创建具体产品的工厂类。\n- 一个类通过其子类来指定创建哪个对象：在工厂方法模式中，对于抽象工厂类只需要提供一个创建产品的接口，而由其子类来确定具体要创建的对象，利用面向对象的多态性和里氏代换原则，在程序运行时，子类对象将覆盖父类对象，从而使得系统更容易扩展。\n- 将创建对象的任务委托给多个工厂子类中的某一个，客户端在使用时可以无须关心是哪一个工厂子类创建产品子类，需要时再动态指定，可将具体工厂类的类名存储在配置文件或数据库中。\n\n模式应用\n--------------------\nJDBC中的工厂方法::\n\n    Connection conn=DriverManager.getConnection(\"jdbc:microsoft:sqlserver://loc\n    alhost:1433; DatabaseName=DB;user=sa;password=\");\n    Statement statement=conn.createStatement();\n    ResultSet rs=statement.executeQuery(\"select * from UserInfo\");\n\n模式扩展\n--------------------\n- 使用多个工厂方法：在抽象工厂角色中可以定义多个工厂方法，从而使具体工厂角色实现这些不同的工厂方法，这些方法可以包含不同的业务逻辑，以满足对不同的产品对象的需求。\n- 产品对象的重复使用：工厂对象将已经创建过的产品保存到一个集合（如数组、List等）中，然后根据客户对产品的请求，对集合进行查询。如果有满足要求的产品对象，就直接将该产品返回客户端；如果集合中没有这样的产品对象，那么就创建一个新的满足要求的产品对象，然后将这个对象在增加到集合中，再返回给客户端。\n- 多态性的丧失和模式的退化：如果工厂仅仅返回一个具体产品对象，便违背了工厂方法的用意，发生退化，此时就不再是工厂方法模式了。一般来说，工厂对象应当有一个抽象的父类型，如果工厂等级结构中只有一个具体工厂类的话，抽象工厂就可以省略，也将发生了退化。当只有一个具体工厂，在具体工厂中可以创建所有的产品对象，并且工厂方法设计为静态方法时，工厂方法模式就退化成简单工厂模式。\n\n\n总结\n--------------------\n- 工厂方法模式又称为工厂模式，它属于类创建型模式。在工厂方法模式中，工厂父类负责定义创建产品对象的公共接口，而工厂子类则负责生成具体的产品对象，这样做的目的是将产品类的实例化操作延迟到工厂子类中完成，即通过工厂子类来确定究竟应该实例化哪一个具体产品类。\n- 工厂方法模式包含四个角色：抽象产品是定义产品的接口，是工厂方法模式所创建对象的超类型，即产品对象的共同父类或接口；具体产品实现了抽象产品接口，某种类型的具体产品由专门的具体工厂创建，它们之间往往一一对应；抽象工厂中声明了工厂方法，用于返回一个产品，它是工厂方法模式的核心，任何在模式中创建对象的工厂类都必须实现该接口；具体工厂是抽象工厂类的子类，实现了抽象工厂中定义的工厂方法，并可由客户调用，返回一个具体产品类的实例。\n\n- 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性，工厂方法模式保持了简单工厂模式的优点，而且克服了它的缺点。在工厂方法模式中，核心的工厂类不再负责所有产品的创建，而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口，而不负责产品类被实例化这种细节，这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。\n- 工厂方法模式的主要优点是增加新的产品类时无须修改现有系统，并封装了产品对象的创建细节，系统具有良好的灵活性和可扩展性；其缺点在于增加新产品的同时需要增加新的工厂，导致系统类的个数成对增加，在一定程度上增加了系统的复杂性。\n- 工厂方法模式适用情况包括：一个类不知道它所需要的对象的类；一个类通过其子类来指定创建哪个对象；将创建对象的任务委托给多个工厂子类中的某一个，客户端在使用时可以无须关心是哪一个工厂子类创建产品子类，需要时再动态指定。\n\n"
  },
  {
    "path": "creational_patterns/simple_factory.rst",
    "content": ".. _simple_factory:\n\n简单工厂模式( Simple Factory Pattern )\n========================================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n考虑一个简单的软件应用场景，一个软件系统可以提供多个外观不同的按钮（如圆形按钮、矩形按钮、菱形按钮等），\n这些按钮都源自同一个基类，不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观，如果我们希望在使用这些按钮时，不需要知道这些具体按钮类的名字，只需要知道表示该按钮类的一个参数，并提供一个调用方便的方法，把该参数传入方法即可返回一个相应的按钮对象，此时，就可以使用简单工厂模式。 \n\n模式定义\n--------------------\n简单工厂模式(Simple Factory Pattern)：又称为静态工厂方法(Static Factory Method)模式，它属于类创建型模式。在简单工厂模式中，可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例，被创建的实例通常都具有共同的父类。\n\n\n模式结构\n--------------------\n简单工厂模式包含如下角色：\n\n- Factory：工厂角色\n    工厂角色负责实现创建所有实例的内部逻辑\n- Product：抽象产品角色\n    抽象产品角色是所创建的所有对象的父类，负责描述所有实例所共有的公共接口\n- ConcreteProduct：具体产品角色\n    具体产品角色是创建目标，所有创建的对象都充当这个角色的某个具体类的实例。\n\n.. image:: /_static/SimpleFactory.jpg\n\n时序图\n--------------------\n\n.. image:: /_static/seq_SimpleFactory.jpg\n\n代码分析\n--------------------\n\n.. literalinclude:: /code/SimpleFactory/Factory.cpp\n   :language: cpp\n   :lines: 1-10,24-\n   :emphasize-lines: 12-19\n   :linenos:\n\n\n模式分析\n--------------------\n\n- 将对象的创建和对象本身业务处理分离可以降低系统的耦合度，使得两者修改起来都相对容易。\n- 在调用工厂类的工厂方法时，由于工厂方法是静态方法，使用起来很方便，可通过类名直接调用，而且只需要传入一个简单的参数即可，在实际开发中，还可以在调用时将所传入的参数保存在XML等格式的配置文件中，修改参数时无须修改任何源代码。\n- 简单工厂模式最大的问题在于工厂类的职责相对过重，增加新的产品需要修改工厂类的判断逻辑，这一点与开闭原则是相违背的。\n- 简单工厂模式的要点在于：当你需要什么，只需要传入一个正确的参数，就可以获取你所需要的对象，而无须知道其创建细节。\n\n实例\n--------------------\n(略）\n\n\n简单工厂模式的优点\n--------------------\n\n- 工厂类含有必要的判断逻辑，可以决定在什么时候创建哪一个产品类的实例，客户端可以免除直接创建产品对象的责任，而仅仅“消费”产品；简单工厂模式通过这种做法实现了对责任的分割，它提供了专门的工厂类用于创建对象。\n- 客户端无须知道所创建的具体产品类的类名，只需要知道具体产品类所对应的参数即可，对于一些复杂的类名，通过简单工厂模式可以减少使用者的记忆量。\n- 通过引入配置文件，可以在不修改任何客户端代码的情况下更换和增加新的具体产品类，在一定程度上提高了系统的灵活性。\n\n简单工厂模式的缺点\n--------------------\n\n- 由于工厂类集中了所有产品创建逻辑，一旦不能正常工作，整个系统都要受到影响。\n- 使用简单工厂模式将会增加系统中类的个数，在一定程序上增加了系统的复杂度和理解难度。\n- 系统扩展困难，一旦添加新产品就不得不修改工厂逻辑，在产品类型较多时，有可能造成工厂逻辑过于复杂，不利于系统的扩展和维护。\n- 简单工厂模式由于使用了静态工厂方法，造成工厂角色无法形成基于继承的等级结构。\n\n适用环境\n--------------------\n在以下情况下可以使用简单工厂模式：\n\n- 工厂类负责创建的对象比较少：由于创建的对象较少，不会造成工厂方法中的业务逻辑太过复杂。\n- 客户端只知道传入工厂类的参数，对于如何创建对象不关心：客户端既不需要关心创建细节，甚至连类名都不需要记住，只需要知道类型所对应的参数。\n\n模式应用\n--------------------\n1. JDK类库中广泛使用了简单工厂模式，如工具类java.text.DateFormat，它用于格式化一个本地日期或者时间。\n\n::\n\n    public final static DateFormat getDateInstance();\n    public final static DateFormat getDateInstance(int style);\n    public final static DateFormat getDateInstance(int style,Locale \n    locale);\n\n2. Java加密技术\n\n获取不同加密算法的密钥生成器::\n\n    KeyGenerator keyGen=KeyGenerator.getInstance(\"DESede\");\n\n创建密码器::\n\n    Cipher cp=Cipher.getInstance(\"DESede\");\n\n总结\n--------------------\n\n- 创建型模式对类的实例化过程进行了抽象，能够将对象的创建与对象的使用过程分离。\n- 简单工厂模式又称为静态工厂方法模式，它属于类创建型模式。在简单工厂模式中，可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例，被创建的实例通常都具有共同的父类。\n- 简单工厂模式包含三个角色：工厂角色负责实现创建所有实例的内部逻辑；抽象产品角色是所创建的所有对象的父类，负责描述所有实例所共有的公共接口；具体产品角色是创建目标，所有创建的对象都充当这个角色的某个具体类的实例。\n- 简单工厂模式的要点在于：当你需要什么，只需要传入一个正确的参数，就可以获取你所需要的对象，而无须知道其创建细节。\n- 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离，将对象的创建交给专门的工厂类负责，但是其最大的缺点在于工厂类不够灵活，增加新的具体产品需要修改工厂类的判断逻辑代码，而且产品较多时，工厂方法代码将会非常复杂。\n- 简单工厂模式适用情况包括：工厂类负责创建的对象比较少；客户端只知道传入工厂类的参数，对于如何创建对象不关心。\n\n\n"
  },
  {
    "path": "creational_patterns/singleton.rst",
    "content": ".. _singleton:\n\n单例模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n对于系统中的某些类来说，只有一个实例很重要，例如，一个系统中可以存在多个打印任务，但是只能有一个正在工作的任务；一个系统只能有一个窗口管理器或文件系统；一个系统只能有一个计时工具或ID（序号）生成器。\n\n如何保证一个类只有一个实例并且这个实例易于被访问呢？定义一个全局变量可以确保对象随时都可以被访问，但不能防止我们实例化多个对象。\n\n一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建，并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。\n\n\n模式定义\n--------------------\n单例模式(Singleton Pattern)：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例，这个类称为单例类，它提供全局访问的方法。\n\n单例模式的要点有三个：一是某个类只能有一个实例；二是它必须自行创建这个实例；三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。\n\n\n模式结构\n--------------------\n单例模式包含如下角色：\n\n- Singleton：单例\n\n.. image:: /_static/Singleton.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Singleton.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Singleton/main.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 7-8\n\n.. literalinclude:: /code/Singleton/Singleton.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 21-28\n\n运行结果：\n\n.. image:: /_static/Singleton_run.jpg\n\n模式分析\n--------------------\n单例模式的目的是保证一个类仅有一个实例，并提供一个访问它的全局访问点。单例模式包含的角色只有一个，就是单例类——Singleton。单例类拥有一个私有构造函数，确保用户无法通过new关键字直接实例化它。除此之外，该模式中包含一个静态私有成员变量与静态公有的工厂方法，该工厂方法负责检验实例的存在性并实例化自己，然后存储在静态成员变量中，以确保只有一个实例被创建。\n\n在单例模式的实现过程中，需要注意如下三点：\n\n- 单例类的构造函数为私有；\n- 提供一个自身的静态私有成员变量；\n- 提供一个公有的静态工厂方法。\n\n\n实例\n--------------------\n在操作系统中，打印池(Print Spooler)是一个用于管理打印任务的应用程序，通过打印池用户可以删除、中止或者改变打印任务的优先级，在一个系统中只允许运行一个打印池对象，如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。\n\n\n优点\n--------------------\n- 提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例，所以它可以严格控制客户怎样以及何时访问它，并为设计及开发团队提供了共享的概念。\n- 由于在系统内存中只存在一个对象，因此可以节约系统资源，对于一些需要频繁创建和销毁的对象，单例模式无疑可以提高系统的性能。\n- 允许可变数目的实例。我们可以基于单例模式进行扩展，使用与单例控制相似的方法来获得指定个数的对象实例。\n\n\n缺点\n--------------------\n- 由于单例模式中没有抽象层，因此单例类的扩展有很大的困难。\n- 单例类的职责过重，在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色，提供了工厂方法，同时又充当了产品角色，包含一些业务方法，将产品的创建和产品的本身的功能融合到一起。\n- 滥用单例将带来一些负面问题，如为了节省资源将数据库连接池对象设计为单例类，可能会导致共享连接池对象的程序过多而出现连接池溢出；现在很多面向对象语言(如Java、C#)的运行环境都提供了自动垃圾回收的技术，因此，如果实例化的对象长时间不被利用，系统会认为它是垃圾，会自动销毁并回收资源，下次利用时又将重新实例化，这将导致对象状态的丢失。\n\n\n适用环境\n--------------------\n在以下情况下可以使用单例模式：\n\n- 系统只需要一个实例对象，如系统要求提供一个唯一的序列号生成器，或者需要考虑资源消耗太大而只允许创建一个对象。\n- 客户调用类的单个实例只允许使用一个公共访问点，除了该公共访问点，不能通过其他途径访问该实例。\n- 在一个系统中要求一个类只有一个实例时才应当使用单例模式。反过来，如果一个类可以有几个实例共存，就需要对单例模式进行改进，使之成为多例模式\n\n\n模式应用\n--------------------\n一个具有自动编号主键的表可以有多个用户同时使用，但数据库中只能有一个地方分配下一个主键编号，否则会出现主键重复，因此该主键编号生成器必须具备唯一性，可以通过单例模式来实现。\n\n\n模式扩展\n--------------------\n\n总结\n--------------------\n- 单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例，这个类称为单例类，它提供全局访问的方法。单例模式的要点有三个：一是某个类只能有一个实例；二是它必须自行创建这个实例；三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。\n- 单例模式只包含一个单例角色：在单例类的内部实现只生成一个实例，同时它提供一个静态的工厂方法，让客户可以使用它的唯一实例；为了防止在外部对其实例化，将其构造函数设计为私有。\n- 单例模式的目的是保证一个类仅有一个实例，并提供一个访问它的全局访问点。单例类拥有一个私有构造函数，确保用户无法通过new关键字直接实例化它。除此之外，该模式中包含一个静态私有成员变量与静态公有的工厂方法。该工厂方法负责检验实例的存在性并实例化自己，然后存储在静态成员变量中，以确保只有一个实例被创建。\n- 单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源；其主要缺点在于因为缺少抽象层而难以扩展，且单例类职责过重。\n- 单例模式适用情况包括：系统只需要一个实例对象；客户调用类的单个实例只允许使用一个公共访问点。\n\n\n\n"
  },
  {
    "path": "dp_tmp.txt",
    "content": "模式动机\n--------------------\n\n模式定义\n--------------------\n\n模式结构\n--------------------\n包含如下角色：\n\n.. image:: /_static/SimpleFactory.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_SimpleFactory.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/SimpleFactory/Factory.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-10,24-\n   :emphasize-lines: 12-19\n\n\n\n模式分析\n--------------------\n\n实例\n--------------------\n\n优点\n--------------------\n\n缺点\n--------------------\n\n适用环境\n--------------------\n\n模式应用\n--------------------\n\n模式扩展\n--------------------\n\n总结\n--------------------"
  },
  {
    "path": "index.rst",
    "content": ".. _index:\n\n图说设计模式\n==============\n\n软件模式是将模式的一般概念应用于软件开发领域，即软件开发的\n总体指导思路或参照样板。软件模式并非仅限于设计模式，还包括\n架构模式、分析模式和过程模式等，实际上，在软件生存期的每一\n个阶段都存在着一些被认同的模式。\n\n本书使用图形和代码结合的方式来解析设计模式；\n\n每个模式都有相应的对象结构图，同时为了展示对象间的交互细节， 我会用到时序图来介绍其如何运行；（在状态模式中， 还会用到状态图，这种图的使用对于理解状态的转换非常直观）\n\n为了让大家能读懂UML图，在最前面会有一篇文章来介绍UML图形符号；\n\n\n在系统的学习设计模式之后，我们需要达到3个层次：\n\n1. 能在白纸上画出所有的模式结构和时序图；\n\n2. 能用代码实现；如果模式的代码都没有实现过，是用不出来的；即所谓，看得懂，不会用；\n\n3. 灵活应用到工作中的项目中；\n\n\n\n.. toctree::\n   :maxdepth: 2\n    \n   read_uml\n   creational_patterns/creational\n   structural_patterns/structural\n   behavioral_patterns/behavioral\n    \n--------------------\n\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`search`\n\n"
  },
  {
    "path": "make.bat",
    "content": "@ECHO OFF\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset BUILDDIR=_build\nset ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .\nset I18NSPHINXOPTS=%SPHINXOPTS% .\nif NOT \"%PAPER%\" == \"\" (\n\tset ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%\n\tset I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%\n)\n\nif \"%1\" == \"\" goto help\n\nif \"%1\" == \"help\" (\n\t:help\n\techo.Please use `make ^<target^>` where ^<target^> is one of\n\techo.  html       to make standalone HTML files\n\techo.  dirhtml    to make HTML files named index.html in directories\n\techo.  singlehtml to make a single large HTML file\n\techo.  pickle     to make pickle files\n\techo.  json       to make JSON files\n\techo.  htmlhelp   to make HTML files and a HTML help project\n\techo.  qthelp     to make HTML files and a qthelp project\n\techo.  devhelp    to make HTML files and a Devhelp project\n\techo.  epub       to make an epub\n\techo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\n\techo.  text       to make text files\n\techo.  man        to make manual pages\n\techo.  texinfo    to make Texinfo files\n\techo.  gettext    to make PO message catalogs\n\techo.  changes    to make an overview over all changed/added/deprecated items\n\techo.  xml        to make Docutils-native XML files\n\techo.  pseudoxml  to make pseudoxml-XML files for display purposes\n\techo.  linkcheck  to check all external links for integrity\n\techo.  doctest    to run all doctests embedded in the documentation if enabled\n\tgoto end\n)\n\nif \"%1\" == \"clean\" (\n\tfor /d %%i in (%BUILDDIR%\\*) do rmdir /q /s %%i\n\tdel /q /s %BUILDDIR%\\*\n\tgoto end\n)\n\n\n%SPHINXBUILD% 2> nul\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.http://sphinx-doc.org/\n\texit /b 1\n)\n\nif \"%1\" == \"html\" (\n\t%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/html.\n\tgoto end\n)\n\nif \"%1\" == \"dirhtml\" (\n\t%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.\n\tgoto end\n)\n\nif \"%1\" == \"singlehtml\" (\n\t%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.\n\tgoto end\n)\n\nif \"%1\" == \"pickle\" (\n\t%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can process the pickle files.\n\tgoto end\n)\n\nif \"%1\" == \"json\" (\n\t%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can process the JSON files.\n\tgoto end\n)\n\nif \"%1\" == \"htmlhelp\" (\n\t%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can run HTML Help Workshop with the ^\n.hhp project file in %BUILDDIR%/htmlhelp.\n\tgoto end\n)\n\nif \"%1\" == \"qthelp\" (\n\t%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can run \"qcollectiongenerator\" with the ^\n.qhcp project file in %BUILDDIR%/qthelp, like this:\n\techo.^> qcollectiongenerator %BUILDDIR%\\qthelp\\redis.qhcp\n\techo.To view the help file:\n\techo.^> assistant -collectionFile %BUILDDIR%\\qthelp\\redis.ghc\n\tgoto end\n)\n\nif \"%1\" == \"devhelp\" (\n\t%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished.\n\tgoto end\n)\n\nif \"%1\" == \"epub\" (\n\t%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The epub file is in %BUILDDIR%/epub.\n\tgoto end\n)\n\nif \"%1\" == \"latex\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; the LaTeX files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"latexpdf\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tcd %BUILDDIR%/latex\n\tmake all-pdf\n\tcd %BUILDDIR%/..\n\techo.\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"latexpdfja\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tcd %BUILDDIR%/latex\n\tmake all-pdf-ja\n\tcd %BUILDDIR%/..\n\techo.\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"text\" (\n\t%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The text files are in %BUILDDIR%/text.\n\tgoto end\n)\n\nif \"%1\" == \"man\" (\n\t%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The manual pages are in %BUILDDIR%/man.\n\tgoto end\n)\n\nif \"%1\" == \"texinfo\" (\n\t%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.\n\tgoto end\n)\n\nif \"%1\" == \"gettext\" (\n\t%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The message catalogs are in %BUILDDIR%/locale.\n\tgoto end\n)\n\nif \"%1\" == \"changes\" (\n\t%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.The overview file is in %BUILDDIR%/changes.\n\tgoto end\n)\n\nif \"%1\" == \"linkcheck\" (\n\t%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Link check complete; look for any errors in the above output ^\nor in %BUILDDIR%/linkcheck/output.txt.\n\tgoto end\n)\n\nif \"%1\" == \"doctest\" (\n\t%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Testing of doctests in the sources finished, look at the ^\nresults in %BUILDDIR%/doctest/output.txt.\n\tgoto end\n)\n\nif \"%1\" == \"xml\" (\n\t%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The XML files are in %BUILDDIR%/xml.\n\tgoto end\n)\n\nif \"%1\" == \"pseudoxml\" (\n\t%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.\n\tgoto end\n)\n\n:end\n"
  },
  {
    "path": "read_uml.rst",
    "content": ".. _read_uml:\n\n看懂UML类图和时序图\n====================\n这里不会将UML的各种元素都提到，我只想讲讲类图中各个类之间的关系；\n能看懂类图中各个类之间的线条、箭头代表什么意思后，也就足够应对\n日常的工作和交流；\n同时，我们应该能将类图所表达的含义和最终的代码对应起来；\n有了这些知识，看后面章节的设计模式结构图就没有什么问题了；\n\n本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patterns.EAP\n\n从一个示例开始\n--------------------\n\n请看以下这个类图，类之间的关系是我们需要关注的：\n\n.. image:: /_static/uml_class_struct.jpg\n\n- 车的类图结构为<<abstract>>，表示车是一个抽象类；\n- 它有两个继承类：小汽车和自行车；它们之间的关系为实现关系，使用带空心箭头的虚线表示；\n- 小汽车为与SUV之间也是继承关系，它们之间的关系为泛化关系，使用带空心箭头的实线表示；\n- 小汽车与发动机之间是组合关系，使用带实心箭头的实线表示；\n- 学生与班级之间是聚合关系，使用带空心箭头的实线表示；\n- 学生与身份证之间为关联关系，使用一根实线表示；\n- 学生上学需要用到自行车，与自行车是一种依赖关系，使用带箭头的虚线表示；\n\n下面我们将介绍这六种关系；\n\n----------------------------------------\n\n\n\n类之间的关系\n--------------------\n泛化关系(generalization)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n类的继承结构表现在UML中为：泛化(generalize)与实现(realize)：\n\n继承关系为 is-a的关系；两个对象之间如果可以用 is-a 来表示，就是继承关系：（..是..)\n\neg：自行车是车、猫是动物\n\n泛化关系用一条带空心箭头的直接表示；如下图表示（A继承自B）；\n\n.. image:: /_static/uml_generalization.jpg\n\neg：汽车在现实中有实现，可用汽车定义具体的对象；汽车与SUV之间为泛化关系；\n\n.. image:: /_static/uml_generalize.jpg\n\n注：最终代码中，泛化关系表现为继承非抽象类；\n\n实现关系(realize)\n^^^^^^^^^^^^^^^^^^^^\n实现关系用一条带空心箭头的虚线表示；\n\neg：\"车\"为一个抽象概念，在现实中并无法直接用来定义对象；只有指明具体的子类(汽车还是自行车)，才\n可以用来定义对象（\"车\"这个类在C++中用抽象类表示，在JAVA中有接口这个概念，更容易理解）\n\n.. image:: /_static/uml_realize.jpg\n\n注：最终代码中，实现关系表现为继承抽象类；\n\n聚合关系(aggregation)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n聚合关系用一条带空心菱形箭头的直线表示，如下图表示A聚合到B上，或者说B由A组成；\n\n.. image:: /_static/uml_aggregation.jpg\n\n聚合关系用于表示实体对象之间的关系，表示整体由部分构成的语义；例如一个部门由多个员工组成；\n\n与组合关系不同的是，整体和部分不是强依赖的，即使整体不存在了，部分仍然存在；例如，\n部门撤销了，人员不会消失，他们依然存在；\n\n组合关系(composition)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n组合关系用一条带实心菱形箭头直线表示，如下图表示A组成B，或者B由A组成；\n\n.. image:: /_static/uml_composition.jpg\n\n与聚合关系一样，组合关系同样表示整体由部分构成的语义；比如公司由多个部门组成；\n\n但组合关系是一种强依赖的特殊聚合关系，如果整体不存在了，则部分也不存在了；例如，\n公司不存在了，部门也将不存在了；\n\n关联关系(association)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n关联关系是用一条直线表示的；它描述不同类的对象之间的结构关系；它是一种静态关系，\n通常与运行状态无关，一般由常识等因素决定的；它一般用来定义对象之间静态的、天然的结构；\n所以，关联关系是一种“强关联”的关系；\n\n比如，乘车人和车票之间就是一种关联关系；学生和学校就是一种关联关系；\n\n关联关系默认不强调方向，表示对象间相互知道；如果特别强调方向，如下图，表示A知道B，但\nB不知道A；\n\n.. image:: /_static/uml_association.jpg\n\n注：在最终代码中，关联对象通常是以成员变量的形式实现的；\n\n依赖关系(dependency)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n依赖关系是用一套带箭头的虚线表示的；如下图表示A依赖于B；他描述一个对象在运行期间会用到另一个对象的关系；\n\n.. image:: /_static/uml_dependency.jpg\n\n与关联关系不同的是，它是一种临时性的关系，通常在运行期间产生，并且随着运行时的变化；\n依赖关系也可能发生变化；\n\n显然，依赖也有方向，双向依赖是一种非常糟糕的结构，我们总是应该保持单向依赖，杜绝双向依赖的产生；\n\n注：在最终代码中，依赖关系体现为类构造方法及类方法的传入参数，箭头的指向为调用关系；依赖关系除了临时知道对方外，还是“使用”对方的方法和属性；\n\n时序图\n--------------------\n为了展示对象之间的交互细节，后续对设计模式解析的章节，都会用到时序图；\n\n时序图（Sequence Diagram）是显示对象之间交互的图，这些对象是按时间顺序排列的。时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。\n\n时序图包括的建模元素主要有：对象（Actor）、生命线（Lifeline）、控制焦点（Focus of control）、消息（Message）等等。\n\n关于时序图，以下这篇文章将概念介绍的比较详细；更多实例应用，参见后续章节模式中的时序图；\n\nhttp://smartlife.blog.51cto.com/1146871/284874\n\n\n附录\n--------------------\n在EA中定义一个抽象类（其版型为《abstract》)\n\n.. image:: /_static/uml_AbatractClass.jpg\n\n"
  },
  {
    "path": "readme.rst",
    "content": ".. _readme:\n\n图说设计模式\n===============\n\n本书使用图形和代码结合的方式来解析设计模式；\n\n每个模式都有相应的对象结构图，同时为了展示对象间的交互细节，\n我会用到时序图来介绍其如何运行；（在状态模式中，\n还会用到状态图，这种图的使用对于理解状态的转换非常直观）\n\n为了让大家能读懂UML图，在最前面会有一篇文章来介绍UML图形符号(看到UML类图和时序图);\n\n\n\n在系统的学习设计模式之后，我们需要达到3个层次：\n\n1. 能在白纸上画出所有的模式结构和时序图；\n\n2. 能用代码实现；如果模式的代码都没有实现过，是用不出来的；即所谓，看得懂，不会用；\n\n3. 灵活应用到工作中的项目中；\n\n\n目录结构说明\n--------------------\n\n本书使用reStructuredText编写，你应该从index.rst开始；\n\n根目录下的design_patterns.EAP为 EA的工程文件，里面包含里书中所有的类图和时序图示例；\n\ncode/：书中所有模式实现的示例源代码（工程使用C-Free组织，在gcc 4.6.2下编译通过）；\n\n以下三个目录为具体的模式讲解文章；\n\ncreational_patterns/ structural_patterns/ behavioral_patterns/\n\n_static/：包含书中用到的所有图片；\n\n_build/： 使用sphnix生成的html文档目录；\n\nsphinx_rtd_theme/：为生成html文档所使用的主题；\n\n\n在线浏览\n====================\n\nhttp://design-patterns.readthedocs.org/zh_CN/latest/index.html\n"
  },
  {
    "path": "sphinx_rtd_theme/__init__.py",
    "content": "\"\"\"Sphinx ReadTheDocs theme.\n\nFrom https://github.com/ryan-roemer/sphinx-bootstrap-theme.\n\n\"\"\"\nimport os\n\nVERSION = (0, 1, 5)\n\n__version__ = \".\".join(str(v) for v in VERSION)\n__version_full__ = __version__\n\n\ndef get_html_theme_path():\n    \"\"\"Return list of HTML theme paths.\"\"\"\n    cur_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))\n    return cur_dir\n"
  },
  {
    "path": "sphinx_rtd_theme/breadcrumbs.html",
    "content": "<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n  <ul class=\"wy-breadcrumbs\">\n    <li><a href=\"{{ pathto(master_doc) }}\">Docs</a> &raquo;</li>\n      {% for doc in parents %}\n          <li><a href=\"{{ doc.link|e }}\">{{ doc.title }}</a> &raquo;</li>\n      {% endfor %}\n    <li>{{ title }}</li>\n      <li class=\"wy-breadcrumbs-aside\">\n        {% if display_github %}\n          <a href=\"https://github.com/{{ github_user }}/{{ github_repo }}/blob/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}\" class=\"fa fa-github\"> Edit on GitHub</a>\n        {% elif display_bitbucket %}\n          <a href=\"https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}\" class=\"fa fa-bitbucket\"> Edit on Bitbucket</a>\n        {% elif show_source and has_source and sourcename %}\n          <a href=\"{{ pathto('_sources/' + sourcename, true)|e }}\" rel=\"nofollow\"> View page source</a>\n        {% endif %}\n      </li>\n  </ul>\n  <hr/>\n</div>\n"
  },
  {
    "path": "sphinx_rtd_theme/footer.html",
    "content": "<footer>\n  {% if next or prev %}\n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      {% if next %}\n        <a href=\"{{ next.link|e }}\" class=\"btn btn-neutral float-right\" title=\"{{ next.title|striptags|e }}\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      {% endif %}\n      {% if prev %}\n        <a href=\"{{ prev.link|e }}\" class=\"btn btn-neutral\" title=\"{{ prev.title|striptags|e }}\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      {% endif %}\n    </div>\n  {% endif %}\n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n    {%- if show_copyright %}\n      {%- if hasdoc('copyright') %}\n        {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href=\"{{ path }}\">Copyright</a> {{ copyright }}.{% endtrans %}\n      {%- else %}\n        {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}\n      {%- endif %}\n    {%- endif %}\n\n    {%- if last_updated %}\n      {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}\n    {%- endif %}\n    </p>\n  </div>\n\n  {% trans %}<a href=\"https://github.com/snide/sphinx_rtd_theme\">Sphinx theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>{% endtrans %}\n</footer>\n"
  },
  {
    "path": "sphinx_rtd_theme/layout.html",
    "content": "{# TEMPLATE VAR SETTINGS #}\n{%- set url_root = pathto('', 1) %}\n{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}\n{%- if not embedded and docstitle %}\n  {%- set titlesuffix = \" &mdash; \"|safe + docstitle|e %}\n{%- else %}\n  {%- set titlesuffix = \"\" %}\n{%- endif %}\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  {% block htmltitle %}\n  <title>{{ title|striptags|e }}{{ titlesuffix }}</title>\n  {% endblock %}\n\n  {# FAVICON #}\n  {% if favicon %}\n    <link rel=\"shortcut icon\" href=\"{{ pathto('_static/' + favicon, 1) }}\"/>\n  {% endif %}\n\n  {# CSS #}\n  <link href=\"{{ pathto('_static/css/font_lato_googleapi.css', 1) }}\" type='text/css'>\n  {# OPENSEARCH #}\n  {% if not embedded %}\n    {% if use_opensearch %}\n      <link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}\" href=\"{{ pathto('_static/opensearch.xml', 1) }}\"/>\n    {% endif %}\n\n  {% endif %}\n\n  {# RTD hosts this file, so just load on non RTD builds #}\n  {% if not READTHEDOCS %}\n    <link rel=\"stylesheet\" href=\"{{ pathto('_static/' + style, 1) }}\" type=\"text/css\" />\n  {% endif %}\n\n  {% for cssfile in css_files %}\n    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n  {% endfor %}\n\n  {%- block linktags %}\n    {%- if hasdoc('about') %}\n        <link rel=\"author\" title=\"{{ _('About these documents') }}\"\n              href=\"{{ pathto('about') }}\"/>\n    {%- endif %}\n    {%- if hasdoc('genindex') %}\n        <link rel=\"index\" title=\"{{ _('Index') }}\"\n              href=\"{{ pathto('genindex') }}\"/>\n    {%- endif %}\n    {%- if hasdoc('search') %}\n        <link rel=\"search\" title=\"{{ _('Search') }}\" href=\"{{ pathto('search') }}\"/>\n    {%- endif %}\n    {%- if hasdoc('copyright') %}\n        <link rel=\"copyright\" title=\"{{ _('Copyright') }}\" href=\"{{ pathto('copyright') }}\"/>\n    {%- endif %}\n    <link rel=\"top\" title=\"{{ docstitle|e }}\" href=\"{{ pathto('index') }}\"/>\n    {%- if parents %}\n        <link rel=\"up\" title=\"{{ parents[-1].title|striptags|e }}\" href=\"{{ parents[-1].link|e }}\"/>\n    {%- endif %}\n    {%- if next %}\n        <link rel=\"next\" title=\"{{ next.title|striptags|e }}\" href=\"{{ next.link|e }}\"/>\n    {%- endif %}\n    {%- if prev %}\n        <link rel=\"prev\" title=\"{{ prev.title|striptags|e }}\" href=\"{{ prev.link|e }}\"/>\n    {%- endif %}\n  {%- endblock %}\n  {%- block extrahead %} {% endblock %}\n\n  {# Keep modernizr in head - http://modernizr.com/docs/#installing #}\n  <script type=\"text/javascript\" src=\"{{ pathto('_static/js/modernizr.min.js', 1) }}\"></script>\n\n</head>\n\n<body class=\"wy-body-for-nav\" role=\"document\">\n\n  <div class=\"wy-grid-for-nav\">\n\n    {# SIDE NAV, TOGGLES ON MOBILE #}\n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-nav-search\">\n        {% block sidebartitle %}\n          <a href=\"{{ pathto(master_doc) }}\" class=\"fa fa-home\"> {{ project }}</a>\n        {% endblock %}\n        {% include \"searchbox.html\" %}\n      </div>\n\n      <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n        {% set toctree = toctree(maxdepth=2, collapse=False, includehidden=True) %}\n        {% if toctree %}\n            {{ toctree }}\n        {% else %}\n            <!-- Local TOC -->\n            <div class=\"local-toc\">{{ toc }}</div>\n        {% endif %}\n      </div>\n      &nbsp;\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      {# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}\n      <nav class=\"wy-nav-top\" role=\"navigation\" aria-label=\"top navigation\">\n        <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n        <a href=\"{{ pathto(master_doc) }}\">{{ project }}</a>\n      </nav>\n\n\n      {# PAGE CONTENT #}\n      <div class=\"wy-nav-content\">\n        <div class=\"rst-content\">\n          {% include \"breadcrumbs.html\" %}\n          <div role=\"main\" class=\"document\">\n            {% block body %}{% endblock %}\n          </div>\n          {% include \"footer.html\" %}\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  {% include \"versions.html\" %}\n\n  {% if not embedded %}\n\n    <script type=\"text/javascript\">\n        var DOCUMENTATION_OPTIONS = {\n            URL_ROOT:'{{ url_root }}',\n            VERSION:'{{ release|e }}',\n            COLLAPSE_INDEX:false,\n            FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',\n            HAS_SOURCE:  {{ has_source|lower }}\n        };\n    </script>\n    {%- for scriptfile in script_files %}\n      <script type=\"text/javascript\" src=\"{{ pathto(scriptfile, 1) }}\"></script>\n    {%- endfor %}\n\n  {% endif %}\n\n  {# RTD hosts this file, so just load on non RTD builds #}\n  {% if not READTHEDOCS %}\n    <script type=\"text/javascript\" src=\"{{ pathto('_static/js/theme.js', 1) }}\"></script>\n  {% endif %}\n\n  {# STICKY NAVIGATION #}\n  {% if theme_sticky_navigation %}\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.StickyNav.enable();\n      });\n  </script>\n  {% endif %}\n\n  {%- block footer %} {% endblock %}\n\n</body>\n</html>\n"
  },
  {
    "path": "sphinx_rtd_theme/layout_old.html",
    "content": "{#\n    basic/layout.html\n    ~~~~~~~~~~~~~~~~~\n\n    Master layout template for Sphinx themes.\n\n    :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.\n    :license: BSD, see LICENSE for details.\n#}\n{%- block doctype -%}\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n{%- endblock %}\n{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}\n{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}\n{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and\n                         (sidebars != []) %}\n{%- set url_root = pathto('', 1) %}\n{# XXX necessary? #}\n{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}\n{%- if not embedded and docstitle %}\n  {%- set titlesuffix = \" &mdash; \"|safe + docstitle|e %}\n{%- else %}\n  {%- set titlesuffix = \"\" %}\n{%- endif %}\n\n{%- macro relbar() %}\n    <div class=\"related\">\n      <h3>{{ _('Navigation') }}</h3>\n      <ul>\n        {%- for rellink in rellinks %}\n        <li class=\"right\" {% if loop.first %}style=\"margin-right: 10px\"{% endif %}>\n          <a href=\"{{ pathto(rellink[0]) }}\" title=\"{{ rellink[1]|striptags|e }}\"\n             {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>\n          {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>\n        {%- endfor %}\n        {%- block rootrellink %}\n        <li><a href=\"{{ pathto(master_doc) }}\">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>\n        {%- endblock %}\n        {%- for parent in parents %}\n          <li><a href=\"{{ parent.link|e }}\" {% if loop.last %}{{ accesskey(\"U\") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>\n        {%- endfor %}\n        {%- block relbaritems %} {% endblock %}\n      </ul>\n    </div>\n{%- endmacro %}\n\n{%- macro sidebar() %}\n      {%- if render_sidebar %}\n      <div class=\"sphinxsidebar\">\n        <div class=\"sphinxsidebarwrapper\">\n          {%- block sidebarlogo %}\n          {%- if logo %}\n            <p class=\"logo\"><a href=\"{{ pathto(master_doc) }}\">\n              <img class=\"logo\" src=\"{{ pathto('_static/' + logo, 1) }}\" alt=\"Logo\"/>\n            </a></p>\n          {%- endif %}\n          {%- endblock %}\n          {%- if sidebars != None %}\n            {#- new style sidebar: explicitly include/exclude templates #}\n            {%- for sidebartemplate in sidebars %}\n            {%- include sidebartemplate %}\n            {%- endfor %}\n          {%- else %}\n            {#- old style sidebars: using blocks -- should be deprecated #}\n            {%- block sidebartoc %}\n            {%- include \"localtoc.html\" %}\n            {%- endblock %}\n            {%- block sidebarrel %}\n            {%- include \"relations.html\" %}\n            {%- endblock %}\n            {%- block sidebarsourcelink %}\n            {%- include \"sourcelink.html\" %}\n            {%- endblock %}\n            {%- if customsidebar %}\n            {%- include customsidebar %}\n            {%- endif %}\n            {%- block sidebarsearch %}\n            {%- include \"searchbox.html\" %}\n            {%- endblock %}\n          {%- endif %}\n        </div>\n      </div>\n      {%- endif %}\n{%- endmacro %}\n\n{%- macro script() %}\n    <script type=\"text/javascript\">\n      var DOCUMENTATION_OPTIONS = {\n        URL_ROOT:    '{{ url_root }}',\n        VERSION:     '{{ release|e }}',\n        COLLAPSE_INDEX: false,\n        FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',\n        HAS_SOURCE:  {{ has_source|lower }}\n      };\n    </script>\n    {%- for scriptfile in script_files %}\n    <script type=\"text/javascript\" src=\"{{ pathto(scriptfile, 1) }}\"></script>\n    {%- endfor %}\n{%- endmacro %}\n\n{%- macro css() %}\n    <link rel=\"stylesheet\" href=\"{{ pathto('_static/' + style, 1) }}\" type=\"text/css\" />\n    <link rel=\"stylesheet\" href=\"{{ pathto('_static/pygments.css', 1) }}\" type=\"text/css\" />\n    {%- for cssfile in css_files %}\n    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n    {%- endfor %}\n{%- endmacro %}\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n  <head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset={{ encoding }}\" />\n    {{ metatags }}\n    {%- block htmltitle %}\n    <title>{{ title|striptags|e }}{{ titlesuffix }}</title>\n    {%- endblock %}\n    {{ css() }}\n    {%- if not embedded %}\n    {{ script() }}\n    {%- if use_opensearch %}\n    <link rel=\"search\" type=\"application/opensearchdescription+xml\"\n          title=\"{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}\"\n          href=\"{{ pathto('_static/opensearch.xml', 1) }}\"/>\n    {%- endif %}\n    {%- if favicon %}\n    <link rel=\"shortcut icon\" href=\"{{ pathto('_static/' + favicon, 1) }}\"/>\n    {%- endif %}\n    {%- endif %}\n{%- block linktags %}\n    {%- if hasdoc('about') %}\n    <link rel=\"author\" title=\"{{ _('About these documents') }}\" href=\"{{ pathto('about') }}\" />\n    {%- endif %}\n    {%- if hasdoc('genindex') %}\n    <link rel=\"index\" title=\"{{ _('Index') }}\" href=\"{{ pathto('genindex') }}\" />\n    {%- endif %}\n    {%- if hasdoc('search') %}\n    <link rel=\"search\" title=\"{{ _('Search') }}\" href=\"{{ pathto('search') }}\" />\n    {%- endif %}\n    {%- if hasdoc('copyright') %}\n    <link rel=\"copyright\" title=\"{{ _('Copyright') }}\" href=\"{{ pathto('copyright') }}\" />\n    {%- endif %}\n    <link rel=\"top\" title=\"{{ docstitle|e }}\" href=\"{{ pathto('index') }}\" />\n    {%- if parents %}\n    <link rel=\"up\" title=\"{{ parents[-1].title|striptags|e }}\" href=\"{{ parents[-1].link|e }}\" />\n    {%- endif %}\n    {%- if next %}\n    <link rel=\"next\" title=\"{{ next.title|striptags|e }}\" href=\"{{ next.link|e }}\" />\n    {%- endif %}\n    {%- if prev %}\n    <link rel=\"prev\" title=\"{{ prev.title|striptags|e }}\" href=\"{{ prev.link|e }}\" />\n    {%- endif %}\n{%- endblock %}\n{%- block extrahead %} {% endblock %}\n  </head>\n  <body>\n{%- block header %}{% endblock %}\n\n{%- block relbar1 %}{{ relbar() }}{% endblock %}\n\n{%- block content %}\n  {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}\n\n    <div class=\"document\">\n  {%- block document %}\n      <div class=\"documentwrapper\">\n      {%- if render_sidebar %}\n        <div class=\"bodywrapper\">\n      {%- endif %}\n          <div class=\"body\">\n            {% block body %} {% endblock %}\n          </div>\n      {%- if render_sidebar %}\n        </div>\n      {%- endif %}\n      </div>\n  {%- endblock %}\n\n  {%- block sidebar2 %}{{ sidebar() }}{% endblock %}\n      <div class=\"clearer\"></div>\n    </div>\n{%- endblock %}\n\n{%- block relbar2 %}{{ relbar() }}{% endblock %}\n\n{%- block footer %}\n    <div class=\"footer\">\n    {%- if show_copyright %}\n      {%- if hasdoc('copyright') %}\n        {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href=\"{{ path }}\">Copyright</a> {{ copyright }}.{% endtrans %}\n      {%- else %}\n        {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}\n      {%- endif %}\n    {%- endif %}\n    {%- if last_updated %}\n      {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}\n    {%- endif %}\n    {%- if show_sphinx %}\n      {% trans sphinx_version=sphinx_version|e %}Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> {{ sphinx_version }}.{% endtrans %}\n    {%- endif %}\n    </div>\n    <p>asdf asdf asdf asdf 22</p>\n{%- endblock %}\n  </body>\n</html>\n\n"
  },
  {
    "path": "sphinx_rtd_theme/search.html",
    "content": "{#\n    basic/search.html\n    ~~~~~~~~~~~~~~~~~\n\n    Template for the search page.\n\n    :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.\n    :license: BSD, see LICENSE for details.\n#}\n{%- extends \"layout.html\" %}\n{% set title = _('Search') %}\n{% set script_files = script_files + ['_static/searchtools.js'] %}\n{% block footer %}\n  <script type=\"text/javascript\">\n    jQuery(function() { Search.loadIndex(\"{{ pathto('searchindex.js', 1) }}\"); });\n  </script>\n  {# this is used when loading the search index using $.ajax fails,\n     such as on Chrome for documents on localhost #}\n  <script type=\"text/javascript\" id=\"searchindexloader\"></script>\n  {{ super() }}\n{% endblock %}\n{% block body %}\n  <noscript>\n  <div id=\"fallback\" class=\"admonition warning\">\n    <p class=\"last\">\n      {% trans %}Please activate JavaScript to enable the search\n      functionality.{% endtrans %}\n    </p>\n  </div>\n  </noscript>\n\n  {% if search_performed %}\n    <h2>{{ _('Search Results') }}</h2>\n    {% if not search_results %}\n      <p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\\'ve selected enough categories.') }}</p>\n    {% endif %}\n  {% endif %}\n  <div id=\"search-results\">\n  {% if search_results %}\n    <ul>\n    {% for href, caption, context in search_results %}\n      <li>\n        <a href=\"{{ pathto(item.href) }}\">{{ caption }}</a>\n        <p class=\"context\">{{ context|e }}</p>\n      </li>\n    {% endfor %}\n    </ul>\n  {% endif %}\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "sphinx_rtd_theme/searchbox.html",
    "content": "<div role=\"search\">\n  <form id =\"rtd-search-form\" class=\"wy-form\" action=\"{{ pathto('search') }}\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n"
  },
  {
    "path": "sphinx_rtd_theme/static/css/badge_only.css",
    "content": "﻿.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:\"\"}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url(\"../font/fontawesome_webfont.eot\");src:url(\"../font/fontawesome_webfont.eot?#iefix\") format(\"embedded-opentype\"),url(\"../font/fontawesome_webfont.woff\") format(\"woff\"),url(\"../font/fontawesome_webfont.ttf\") format(\"truetype\"),url(\"../font/fontawesome_webfont.svg#FontAwesome\") format(\"svg\")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:\"\"}.icon-book:before{content:\"\"}.fa-caret-down:before{content:\"\"}.icon-caret-down:before{content:\"\"}.fa-caret-up:before{content:\"\"}.icon-caret-up:before{content:\"\"}.fa-caret-left:before{content:\"\"}.icon-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.icon-caret-right:before{content:\"\"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:\"\"}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}\n/*# sourceMappingURL=badge_only.css.map */\n"
  },
  {
    "path": "sphinx_rtd_theme/static/css/font_lato_googleapi.css",
    "content": "@font-face {\n  font-family: 'Inconsolata';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Inconsolata'), url(https://fonts.gstatic.com/s/inconsolata/v9/BjAYBlHtW3CJxDcjzrnZCIbN6UDyHWBl620a-IRfuBk.woff) format('woff');\n}\n@font-face {\n  font-family: 'Inconsolata';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Inconsolata Bold'), local('Inconsolata-Bold'), url(https://fonts.gstatic.com/s/inconsolata/v9/AIed271kqQlcIRSOnQH0yTqR_3kx9_hJXbbyU8S6IN0.woff) format('woff');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v10/9k-RPmcnxYEPm8CNFsH2gg.woff) format('woff');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Lato Bold'), local('Lato-Bold'), url(https://fonts.gstatic.com/s/lato/v10/wkfQbvfT_02e2IWO3yYueQ.woff) format('woff');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: italic;\n  font-weight: 400;\n  src: local('Lato Italic'), local('Lato-Italic'), url(https://fonts.gstatic.com/s/lato/v10/oUan5VrEkpzIazlUe5ieaA.woff) format('woff');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: italic;\n  font-weight: 700;\n  src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url(https://fonts.gstatic.com/s/lato/v10/HkF_qI1x_noxlxhrhMQYED8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');\n}\n@font-face {\n  font-family: 'Roboto Slab';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v6/y7lebkjgREBJK96VQi37ZobN6UDyHWBl620a-IRfuBk.woff) format('woff');\n}\n@font-face {\n  font-family: 'Roboto Slab';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v6/dazS1PrQQuCxC3iOAJFEJTqR_3kx9_hJXbbyU8S6IN0.woff) format('woff');\n}\n"
  },
  {
    "path": "sphinx_rtd_theme/static/css/theme.css",
    "content": "﻿*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,kbd,samp{font-family:monospace,serif;_font-family:\"courier new\",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:\"\";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=\"checkbox\"],input[type=\"radio\"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type=\"search\"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=\"search\"]::-webkit-search-decoration,input[type=\"search\"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^=\"javascript:\"]:after,a[href^=\"#\"]:after{content:\"\"}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.fa:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type=\"text\"],input[type=\"password\"],input[type=\"email\"],input[type=\"url\"],input[type=\"date\"],input[type=\"month\"],input[type=\"time\"],input[type=\"datetime\"],input[type=\"datetime-local\"],input[type=\"week\"],input[type=\"number\"],input[type=\"search\"],input[type=\"tel\"],input[type=\"color\"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:\"\"}.clearfix:after{clear:both}/*!\n *  Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url(\"../fonts/fontawesome-webfont.eot?v=4.1.0\");src:url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0\") format(\"embedded-opentype\"),url(\"../fonts/fontawesome-webfont.woff?v=4.1.0\") format(\"woff\"),url(\"../fonts/fontawesome-webfont.ttf?v=4.1.0\") format(\"truetype\"),url(\"../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular\") format(\"svg\");font-weight:normal;font-style:normal}.fa,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.icon{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.pull-left.icon{margin-right:.3em}.fa.pull-right,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\"}.fa-music:before{content:\"\"}.fa-search:before,.icon-search:before{content:\"\"}.fa-envelope-o:before{content:\"\"}.fa-heart:before{content:\"\"}.fa-star:before{content:\"\"}.fa-star-o:before{content:\"\"}.fa-user:before{content:\"\"}.fa-film:before{content:\"\"}.fa-th-large:before{content:\"\"}.fa-th:before{content:\"\"}.fa-th-list:before{content:\"\"}.fa-check:before{content:\"\"}.fa-times:before{content:\"\"}.fa-search-plus:before{content:\"\"}.fa-search-minus:before{content:\"\"}.fa-power-off:before{content:\"\"}.fa-signal:before{content:\"\"}.fa-gear:before,.fa-cog:before{content:\"\"}.fa-trash-o:before{content:\"\"}.fa-home:before,.icon-home:before{content:\"\"}.fa-file-o:before{content:\"\"}.fa-clock-o:before{content:\"\"}.fa-road:before{content:\"\"}.fa-download:before{content:\"\"}.fa-arrow-circle-o-down:before{content:\"\"}.fa-arrow-circle-o-up:before{content:\"\"}.fa-inbox:before{content:\"\"}.fa-play-circle-o:before{content:\"\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\"}.fa-refresh:before{content:\"\"}.fa-list-alt:before{content:\"\"}.fa-lock:before{content:\"\"}.fa-flag:before{content:\"\"}.fa-headphones:before{content:\"\"}.fa-volume-off:before{content:\"\"}.fa-volume-down:before{content:\"\"}.fa-volume-up:before{content:\"\"}.fa-qrcode:before{content:\"\"}.fa-barcode:before{content:\"\"}.fa-tag:before{content:\"\"}.fa-tags:before{content:\"\"}.fa-book:before,.icon-book:before{content:\"\"}.fa-bookmark:before{content:\"\"}.fa-print:before{content:\"\"}.fa-camera:before{content:\"\"}.fa-font:before{content:\"\"}.fa-bold:before{content:\"\"}.fa-italic:before{content:\"\"}.fa-text-height:before{content:\"\"}.fa-text-width:before{content:\"\"}.fa-align-left:before{content:\"\"}.fa-align-center:before{content:\"\"}.fa-align-right:before{content:\"\"}.fa-align-justify:before{content:\"\"}.fa-list:before{content:\"\"}.fa-dedent:before,.fa-outdent:before{content:\"\"}.fa-indent:before{content:\"\"}.fa-video-camera:before{content:\"\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\"}.fa-pencil:before{content:\"\"}.fa-map-marker:before{content:\"\"}.fa-adjust:before{content:\"\"}.fa-tint:before{content:\"\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\"}.fa-share-square-o:before{content:\"\"}.fa-check-square-o:before{content:\"\"}.fa-arrows:before{content:\"\"}.fa-step-backward:before{content:\"\"}.fa-fast-backward:before{content:\"\"}.fa-backward:before{content:\"\"}.fa-play:before{content:\"\"}.fa-pause:before{content:\"\"}.fa-stop:before{content:\"\"}.fa-forward:before{content:\"\"}.fa-fast-forward:before{content:\"\"}.fa-step-forward:before{content:\"\"}.fa-eject:before{content:\"\"}.fa-chevron-left:before{content:\"\"}.fa-chevron-right:before{content:\"\"}.fa-plus-circle:before{content:\"\"}.fa-minus-circle:before{content:\"\"}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:\"\"}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:\"\"}.fa-question-circle:before{content:\"\"}.fa-info-circle:before{content:\"\"}.fa-crosshairs:before{content:\"\"}.fa-times-circle-o:before{content:\"\"}.fa-check-circle-o:before{content:\"\"}.fa-ban:before{content:\"\"}.fa-arrow-left:before{content:\"\"}.fa-arrow-right:before{content:\"\"}.fa-arrow-up:before{content:\"\"}.fa-arrow-down:before{content:\"\"}.fa-mail-forward:before,.fa-share:before{content:\"\"}.fa-expand:before{content:\"\"}.fa-compress:before{content:\"\"}.fa-plus:before{content:\"\"}.fa-minus:before{content:\"\"}.fa-asterisk:before{content:\"\"}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:\"\"}.fa-gift:before{content:\"\"}.fa-leaf:before{content:\"\"}.fa-fire:before,.icon-fire:before{content:\"\"}.fa-eye:before{content:\"\"}.fa-eye-slash:before{content:\"\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\"}.fa-plane:before{content:\"\"}.fa-calendar:before{content:\"\"}.fa-random:before{content:\"\"}.fa-comment:before{content:\"\"}.fa-magnet:before{content:\"\"}.fa-chevron-up:before{content:\"\"}.fa-chevron-down:before{content:\"\"}.fa-retweet:before{content:\"\"}.fa-shopping-cart:before{content:\"\"}.fa-folder:before{content:\"\"}.fa-folder-open:before{content:\"\"}.fa-arrows-v:before{content:\"\"}.fa-arrows-h:before{content:\"\"}.fa-bar-chart-o:before{content:\"\"}.fa-twitter-square:before{content:\"\"}.fa-facebook-square:before{content:\"\"}.fa-camera-retro:before{content:\"\"}.fa-key:before{content:\"\"}.fa-gears:before,.fa-cogs:before{content:\"\"}.fa-comments:before{content:\"\"}.fa-thumbs-o-up:before{content:\"\"}.fa-thumbs-o-down:before{content:\"\"}.fa-star-half:before{content:\"\"}.fa-heart-o:before{content:\"\"}.fa-sign-out:before{content:\"\"}.fa-linkedin-square:before{content:\"\"}.fa-thumb-tack:before{content:\"\"}.fa-external-link:before{content:\"\"}.fa-sign-in:before{content:\"\"}.fa-trophy:before{content:\"\"}.fa-github-square:before{content:\"\"}.fa-upload:before{content:\"\"}.fa-lemon-o:before{content:\"\"}.fa-phone:before{content:\"\"}.fa-square-o:before{content:\"\"}.fa-bookmark-o:before{content:\"\"}.fa-phone-square:before{content:\"\"}.fa-twitter:before{content:\"\"}.fa-facebook:before{content:\"\"}.fa-github:before,.icon-github:before{content:\"\"}.fa-unlock:before{content:\"\"}.fa-credit-card:before{content:\"\"}.fa-rss:before{content:\"\"}.fa-hdd-o:before{content:\"\"}.fa-bullhorn:before{content:\"\"}.fa-bell:before{content:\"\"}.fa-certificate:before{content:\"\"}.fa-hand-o-right:before{content:\"\"}.fa-hand-o-left:before{content:\"\"}.fa-hand-o-up:before{content:\"\"}.fa-hand-o-down:before{content:\"\"}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:\"\"}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:\"\"}.fa-arrow-circle-up:before{content:\"\"}.fa-arrow-circle-down:before{content:\"\"}.fa-globe:before{content:\"\"}.fa-wrench:before{content:\"\"}.fa-tasks:before{content:\"\"}.fa-filter:before{content:\"\"}.fa-briefcase:before{content:\"\"}.fa-arrows-alt:before{content:\"\"}.fa-group:before,.fa-users:before{content:\"\"}.fa-chain:before,.fa-link:before,.icon-link:before{content:\"\"}.fa-cloud:before{content:\"\"}.fa-flask:before{content:\"\"}.fa-cut:before,.fa-scissors:before{content:\"\"}.fa-copy:before,.fa-files-o:before{content:\"\"}.fa-paperclip:before{content:\"\"}.fa-save:before,.fa-floppy-o:before{content:\"\"}.fa-square:before{content:\"\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\"}.fa-list-ul:before{content:\"\"}.fa-list-ol:before{content:\"\"}.fa-strikethrough:before{content:\"\"}.fa-underline:before{content:\"\"}.fa-table:before{content:\"\"}.fa-magic:before{content:\"\"}.fa-truck:before{content:\"\"}.fa-pinterest:before{content:\"\"}.fa-pinterest-square:before{content:\"\"}.fa-google-plus-square:before{content:\"\"}.fa-google-plus:before{content:\"\"}.fa-money:before{content:\"\"}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:\"\"}.fa-caret-up:before{content:\"\"}.fa-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.fa-columns:before{content:\"\"}.fa-unsorted:before,.fa-sort:before{content:\"\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\"}.fa-envelope:before{content:\"\"}.fa-linkedin:before{content:\"\"}.fa-rotate-left:before,.fa-undo:before{content:\"\"}.fa-legal:before,.fa-gavel:before{content:\"\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\"}.fa-comment-o:before{content:\"\"}.fa-comments-o:before{content:\"\"}.fa-flash:before,.fa-bolt:before{content:\"\"}.fa-sitemap:before{content:\"\"}.fa-umbrella:before{content:\"\"}.fa-paste:before,.fa-clipboard:before{content:\"\"}.fa-lightbulb-o:before{content:\"\"}.fa-exchange:before{content:\"\"}.fa-cloud-download:before{content:\"\"}.fa-cloud-upload:before{content:\"\"}.fa-user-md:before{content:\"\"}.fa-stethoscope:before{content:\"\"}.fa-suitcase:before{content:\"\"}.fa-bell-o:before{content:\"\"}.fa-coffee:before{content:\"\"}.fa-cutlery:before{content:\"\"}.fa-file-text-o:before{content:\"\"}.fa-building-o:before{content:\"\"}.fa-hospital-o:before{content:\"\"}.fa-ambulance:before{content:\"\"}.fa-medkit:before{content:\"\"}.fa-fighter-jet:before{content:\"\"}.fa-beer:before{content:\"\"}.fa-h-square:before{content:\"\"}.fa-plus-square:before{content:\"\"}.fa-angle-double-left:before{content:\"\"}.fa-angle-double-right:before{content:\"\"}.fa-angle-double-up:before{content:\"\"}.fa-angle-double-down:before{content:\"\"}.fa-angle-left:before{content:\"\"}.fa-angle-right:before{content:\"\"}.fa-angle-up:before{content:\"\"}.fa-angle-down:before{content:\"\"}.fa-desktop:before{content:\"\"}.fa-laptop:before{content:\"\"}.fa-tablet:before{content:\"\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\"}.fa-circle-o:before{content:\"\"}.fa-quote-left:before{content:\"\"}.fa-quote-right:before{content:\"\"}.fa-spinner:before{content:\"\"}.fa-circle:before{content:\"\"}.fa-mail-reply:before,.fa-reply:before{content:\"\"}.fa-github-alt:before{content:\"\"}.fa-folder-o:before{content:\"\"}.fa-folder-open-o:before{content:\"\"}.fa-smile-o:before{content:\"\"}.fa-frown-o:before{content:\"\"}.fa-meh-o:before{content:\"\"}.fa-gamepad:before{content:\"\"}.fa-keyboard-o:before{content:\"\"}.fa-flag-o:before{content:\"\"}.fa-flag-checkered:before{content:\"\"}.fa-terminal:before{content:\"\"}.fa-code:before{content:\"\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\"}.fa-location-arrow:before{content:\"\"}.fa-crop:before{content:\"\"}.fa-code-fork:before{content:\"\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\"}.fa-question:before{content:\"\"}.fa-info:before{content:\"\"}.fa-exclamation:before{content:\"\"}.fa-superscript:before{content:\"\"}.fa-subscript:before{content:\"\"}.fa-eraser:before{content:\"\"}.fa-puzzle-piece:before{content:\"\"}.fa-microphone:before{content:\"\"}.fa-microphone-slash:before{content:\"\"}.fa-shield:before{content:\"\"}.fa-calendar-o:before{content:\"\"}.fa-fire-extinguisher:before{content:\"\"}.fa-rocket:before{content:\"\"}.fa-maxcdn:before{content:\"\"}.fa-chevron-circle-left:before{content:\"\"}.fa-chevron-circle-right:before{content:\"\"}.fa-chevron-circle-up:before{content:\"\"}.fa-chevron-circle-down:before{content:\"\"}.fa-html5:before{content:\"\"}.fa-css3:before{content:\"\"}.fa-anchor:before{content:\"\"}.fa-unlock-alt:before{content:\"\"}.fa-bullseye:before{content:\"\"}.fa-ellipsis-h:before{content:\"\"}.fa-ellipsis-v:before{content:\"\"}.fa-rss-square:before{content:\"\"}.fa-play-circle:before{content:\"\"}.fa-ticket:before{content:\"\"}.fa-minus-square:before{content:\"\"}.fa-minus-square-o:before{content:\"\"}.fa-level-up:before{content:\"\"}.fa-level-down:before{content:\"\"}.fa-check-square:before{content:\"\"}.fa-pencil-square:before{content:\"\"}.fa-external-link-square:before{content:\"\"}.fa-share-square:before{content:\"\"}.fa-compass:before{content:\"\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\"}.fa-euro:before,.fa-eur:before{content:\"\"}.fa-gbp:before{content:\"\"}.fa-dollar:before,.fa-usd:before{content:\"\"}.fa-rupee:before,.fa-inr:before{content:\"\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\"}.fa-won:before,.fa-krw:before{content:\"\"}.fa-bitcoin:before,.fa-btc:before{content:\"\"}.fa-file:before{content:\"\"}.fa-file-text:before{content:\"\"}.fa-sort-alpha-asc:before{content:\"\"}.fa-sort-alpha-desc:before{content:\"\"}.fa-sort-amount-asc:before{content:\"\"}.fa-sort-amount-desc:before{content:\"\"}.fa-sort-numeric-asc:before{content:\"\"}.fa-sort-numeric-desc:before{content:\"\"}.fa-thumbs-up:before{content:\"\"}.fa-thumbs-down:before{content:\"\"}.fa-youtube-square:before{content:\"\"}.fa-youtube:before{content:\"\"}.fa-xing:before{content:\"\"}.fa-xing-square:before{content:\"\"}.fa-youtube-play:before{content:\"\"}.fa-dropbox:before{content:\"\"}.fa-stack-overflow:before{content:\"\"}.fa-instagram:before{content:\"\"}.fa-flickr:before{content:\"\"}.fa-adn:before{content:\"\"}.fa-bitbucket:before,.icon-bitbucket:before{content:\"\"}.fa-bitbucket-square:before{content:\"\"}.fa-tumblr:before{content:\"\"}.fa-tumblr-square:before{content:\"\"}.fa-long-arrow-down:before{content:\"\"}.fa-long-arrow-up:before{content:\"\"}.fa-long-arrow-left:before{content:\"\"}.fa-long-arrow-right:before{content:\"\"}.fa-apple:before{content:\"\"}.fa-windows:before{content:\"\"}.fa-android:before{content:\"\"}.fa-linux:before{content:\"\"}.fa-dribbble:before{content:\"\"}.fa-skype:before{content:\"\"}.fa-foursquare:before{content:\"\"}.fa-trello:before{content:\"\"}.fa-female:before{content:\"\"}.fa-male:before{content:\"\"}.fa-gittip:before{content:\"\"}.fa-sun-o:before{content:\"\"}.fa-moon-o:before{content:\"\"}.fa-archive:before{content:\"\"}.fa-bug:before{content:\"\"}.fa-vk:before{content:\"\"}.fa-weibo:before{content:\"\"}.fa-renren:before{content:\"\"}.fa-pagelines:before{content:\"\"}.fa-stack-exchange:before{content:\"\"}.fa-arrow-circle-o-right:before{content:\"\"}.fa-arrow-circle-o-left:before{content:\"\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\"}.fa-dot-circle-o:before{content:\"\"}.fa-wheelchair:before{content:\"\"}.fa-vimeo-square:before{content:\"\"}.fa-turkish-lira:before,.fa-try:before{content:\"\"}.fa-plus-square-o:before{content:\"\"}.fa-space-shuttle:before{content:\"\"}.fa-slack:before{content:\"\"}.fa-envelope-square:before{content:\"\"}.fa-wordpress:before{content:\"\"}.fa-openid:before{content:\"\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\"}.fa-yahoo:before{content:\"\"}.fa-google:before{content:\"\"}.fa-reddit:before{content:\"\"}.fa-reddit-square:before{content:\"\"}.fa-stumbleupon-circle:before{content:\"\"}.fa-stumbleupon:before{content:\"\"}.fa-delicious:before{content:\"\"}.fa-digg:before{content:\"\"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:\"\"}.fa-pied-piper-alt:before{content:\"\"}.fa-drupal:before{content:\"\"}.fa-joomla:before{content:\"\"}.fa-language:before{content:\"\"}.fa-fax:before{content:\"\"}.fa-building:before{content:\"\"}.fa-child:before{content:\"\"}.fa-paw:before{content:\"\"}.fa-spoon:before{content:\"\"}.fa-cube:before{content:\"\"}.fa-cubes:before{content:\"\"}.fa-behance:before{content:\"\"}.fa-behance-square:before{content:\"\"}.fa-steam:before{content:\"\"}.fa-steam-square:before{content:\"\"}.fa-recycle:before{content:\"\"}.fa-automobile:before,.fa-car:before{content:\"\"}.fa-cab:before,.fa-taxi:before{content:\"\"}.fa-tree:before{content:\"\"}.fa-spotify:before{content:\"\"}.fa-deviantart:before{content:\"\"}.fa-soundcloud:before{content:\"\"}.fa-database:before{content:\"\"}.fa-file-pdf-o:before{content:\"\"}.fa-file-word-o:before{content:\"\"}.fa-file-excel-o:before{content:\"\"}.fa-file-powerpoint-o:before{content:\"\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\"}.fa-file-code-o:before{content:\"\"}.fa-vine:before{content:\"\"}.fa-codepen:before{content:\"\"}.fa-jsfiddle:before{content:\"\"}.fa-life-bouy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\"}.fa-circle-o-notch:before{content:\"\"}.fa-ra:before,.fa-rebel:before{content:\"\"}.fa-ge:before,.fa-empire:before{content:\"\"}.fa-git-square:before{content:\"\"}.fa-git:before{content:\"\"}.fa-hacker-news:before{content:\"\"}.fa-tencent-weibo:before{content:\"\"}.fa-qq:before{content:\"\"}.fa-wechat:before,.fa-weixin:before{content:\"\"}.fa-send:before,.fa-paper-plane:before{content:\"\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\"}.fa-history:before{content:\"\"}.fa-circle-thin:before{content:\"\"}.fa-header:before{content:\"\"}.fa-paragraph:before{content:\"\"}.fa-sliders:before{content:\"\"}.fa-share-alt:before{content:\"\"}.fa-share-alt-square:before{content:\"\"}.fa-bomb:before{content:\"\"}.fa,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:\"FontAwesome\";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .icon,.nav .fa,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .icon{display:inline}.btn .fa.fa-large,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#D4E8BF}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6f9f3f;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#D4E8BF}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#6f9f3f}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#6f9f3f}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#6f9f3f}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#6f9f3f !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#6f9f3f;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#6f9f3f}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:\"\"}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#6f9f3f;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=\"search\"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#6f9f3f;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;text-align:right}.wy-dropdown-arrow:before{content:\" \";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#999;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:\"\"}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:\"\"}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:\" *\";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type=\"text\"],.wy-control-group .wy-form-full input[type=\"password\"],.wy-control-group .wy-form-full input[type=\"email\"],.wy-control-group .wy-form-full input[type=\"url\"],.wy-control-group .wy-form-full input[type=\"date\"],.wy-control-group .wy-form-full input[type=\"month\"],.wy-control-group .wy-form-full input[type=\"time\"],.wy-control-group .wy-form-full input[type=\"datetime\"],.wy-control-group .wy-form-full input[type=\"datetime-local\"],.wy-control-group .wy-form-full input[type=\"week\"],.wy-control-group .wy-form-full input[type=\"number\"],.wy-control-group .wy-form-full input[type=\"search\"],.wy-control-group .wy-form-full input[type=\"tel\"],.wy-control-group .wy-form-full input[type=\"color\"],.wy-control-group .wy-form-halves input[type=\"text\"],.wy-control-group .wy-form-halves input[type=\"password\"],.wy-control-group .wy-form-halves input[type=\"email\"],.wy-control-group .wy-form-halves input[type=\"url\"],.wy-control-group .wy-form-halves input[type=\"date\"],.wy-control-group .wy-form-halves input[type=\"month\"],.wy-control-group .wy-form-halves input[type=\"time\"],.wy-control-group .wy-form-halves input[type=\"datetime\"],.wy-control-group .wy-form-halves input[type=\"datetime-local\"],.wy-control-group .wy-form-halves input[type=\"week\"],.wy-control-group .wy-form-halves input[type=\"number\"],.wy-control-group .wy-form-halves input[type=\"search\"],.wy-control-group .wy-form-halves input[type=\"tel\"],.wy-control-group .wy-form-halves input[type=\"color\"],.wy-control-group .wy-form-thirds input[type=\"text\"],.wy-control-group .wy-form-thirds input[type=\"password\"],.wy-control-group .wy-form-thirds input[type=\"email\"],.wy-control-group .wy-form-thirds input[type=\"url\"],.wy-control-group .wy-form-thirds input[type=\"date\"],.wy-control-group .wy-form-thirds input[type=\"month\"],.wy-control-group .wy-form-thirds input[type=\"time\"],.wy-control-group .wy-form-thirds input[type=\"datetime\"],.wy-control-group .wy-form-thirds input[type=\"datetime-local\"],.wy-control-group .wy-form-thirds input[type=\"week\"],.wy-control-group .wy-form-thirds input[type=\"number\"],.wy-control-group .wy-form-thirds input[type=\"search\"],.wy-control-group .wy-form-thirds input[type=\"tel\"],.wy-control-group .wy-form-thirds input[type=\"color\"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type=\"text\"],.wy-control-group.fluid-input input[type=\"password\"],.wy-control-group.fluid-input input[type=\"email\"],.wy-control-group.fluid-input input[type=\"url\"],.wy-control-group.fluid-input input[type=\"date\"],.wy-control-group.fluid-input input[type=\"month\"],.wy-control-group.fluid-input input[type=\"time\"],.wy-control-group.fluid-input input[type=\"datetime\"],.wy-control-group.fluid-input input[type=\"datetime-local\"],.wy-control-group.fluid-input input[type=\"week\"],.wy-control-group.fluid-input input[type=\"number\"],.wy-control-group.fluid-input input[type=\"search\"],.wy-control-group.fluid-input input[type=\"tel\"],.wy-control-group.fluid-input input[type=\"color\"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}input{line-height:normal}input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{-webkit-appearance:button;cursor:pointer;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;*overflow:visible}input[type=\"text\"],input[type=\"password\"],input[type=\"email\"],input[type=\"url\"],input[type=\"date\"],input[type=\"month\"],input[type=\"time\"],input[type=\"datetime\"],input[type=\"datetime-local\"],input[type=\"week\"],input[type=\"number\"],input[type=\"search\"],input[type=\"tel\"],input[type=\"color\"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type=\"datetime-local\"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type=\"checkbox\"],input[type=\"radio\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type=\"search\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=\"search\"]::-webkit-search-cancel-button,input[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}input[type=\"text\"]:focus,input[type=\"password\"]:focus,input[type=\"email\"]:focus,input[type=\"url\"]:focus,input[type=\"date\"]:focus,input[type=\"month\"]:focus,input[type=\"time\"]:focus,input[type=\"datetime\"]:focus,input[type=\"datetime-local\"]:focus,input[type=\"week\"]:focus,input[type=\"number\"]:focus,input[type=\"search\"]:focus,input[type=\"tel\"]:focus,input[type=\"color\"]:focus{outline:0;outline:thin dotted \\9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type=\"file\"]:focus,input[type=\"radio\"]:focus,input[type=\"checkbox\"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type=\"text\"][disabled],input[type=\"password\"][disabled],input[type=\"email\"][disabled],input[type=\"url\"][disabled],input[type=\"date\"][disabled],input[type=\"month\"][disabled],input[type=\"time\"][disabled],input[type=\"datetime\"][disabled],input[type=\"datetime-local\"][disabled],input[type=\"week\"][disabled],input[type=\"number\"][disabled],input[type=\"search\"][disabled],input[type=\"tel\"][disabled],input[type=\"color\"][disabled]{cursor:not-allowed;background-color:#f3f6f6;color:#cad2d3}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type=\"file\"]:focus:invalid:focus,input[type=\"radio\"]:focus:invalid:focus,input[type=\"checkbox\"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fff;color:#cad2d3;border-color:transparent}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{padding:6px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type=\"text\"],.wy-control-group.wy-control-group-error input[type=\"password\"],.wy-control-group.wy-control-group-error input[type=\"email\"],.wy-control-group.wy-control-group-error input[type=\"url\"],.wy-control-group.wy-control-group-error input[type=\"date\"],.wy-control-group.wy-control-group-error input[type=\"month\"],.wy-control-group.wy-control-group-error input[type=\"time\"],.wy-control-group.wy-control-group-error input[type=\"datetime\"],.wy-control-group.wy-control-group-error input[type=\"datetime-local\"],.wy-control-group.wy-control-group-error input[type=\"week\"],.wy-control-group.wy-control-group-error input[type=\"number\"],.wy-control-group.wy-control-group-error input[type=\"search\"],.wy-control-group.wy-control-group-error input[type=\"tel\"],.wy-control-group.wy-control-group-error input[type=\"color\"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#6f9f3f}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type=\"submit\"]{margin:0.7em 0 0}.wy-form input[type=\"text\"],.wy-form input[type=\"password\"],.wy-form input[type=\"email\"],.wy-form input[type=\"url\"],.wy-form input[type=\"date\"],.wy-form input[type=\"month\"],.wy-form input[type=\"time\"],.wy-form input[type=\"datetime\"],.wy-form input[type=\"datetime-local\"],.wy-form input[type=\"week\"],.wy-form input[type=\"number\"],.wy-form input[type=\"search\"],.wy-form input[type=\"tel\"],.wy-form input[type=\"color\"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type=\"password\"],.wy-form input[type=\"email\"],.wy-form input[type=\"url\"],.wy-form input[type=\"date\"],.wy-form input[type=\"month\"],.wy-form input[type=\"time\"],.wy-form input[type=\"datetime\"],.wy-form input[type=\"datetime-local\"],.wy-form input[type=\"week\"],.wy-form input[type=\"number\"],.wy-form input[type=\"search\"],.wy-form input[type=\"tel\"],.wy-form input[type=\"color\"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#6f9f3f;text-decoration:none}a:hover{color:#426F14}a:visited{color:#6f9f3f}html{height:100%;overflow-x:hidden}body{font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#6f9f3f !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:\"Roboto Slab\",\"ff-tisa-web-pro\",\"Georgia\",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,\"Andale Mono WT\",\"Andale Mono\",\"Lucida Console\",\"Lucida Sans Typewriter\",\"DejaVu Sans Mono\",\"Bitstream Vera Sans Mono\",\"Liberation Mono\",\"Nimbus Mono L\",Monaco,\"Courier New\",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:4px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:\"Example\";position:absolute;top:0px;left:0px;background:#6f9f3f;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,\"Andale Mono WT\",\"Andale Mono\",\"Lucida Console\",\"Lucida Sans Typewriter\",\"DejaVu Sans Mono\",\"Bitstream Vera Sans Mono\",\"Liberation Mono\",\"Nimbus Mono L\",Monaco,\"Courier New\",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,\"Andale Mono WT\",\"Andale Mono\",\"Lucida Console\",\"Lucida Sans Typewriter\",\"DejaVu Sans Mono\",\"Bitstream Vera Sans Mono\",\"Liberation Mono\",\"Nimbus Mono L\",Monaco,\"Courier New\",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:\"\"}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical header{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#6f9f3f;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:active{background-color:#6f9f3f;cursor:pointer;color:#fff}.wy-side-nav-search{z-index:200;background-color:#6f9f3f;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#6f9f3f;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-nav .wy-menu-vertical header{color:#6f9f3f}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#6f9f3f;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:absolute;top:0;left:0;width:300px;overflow:hidden;min-height:100%;background:#343131;z-index:200}.wy-nav-top{display:none;background:#6f9f3f;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:\"\"}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#6f9f3f;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:\"\"}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}nav.stickynav{position:fixed;top:0}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;z-index:400}.rst-versions a{color:#6f9f3f;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:\"\"}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after{visibility:visible;content:\"\";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:\"Roboto Slab\",\"ff-tisa-web-pro\",\"Georgia\",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt{color:#000}.rst-content tt big,.rst-content tt em{font-size:100% !important;line-height:normal}.rst-content tt .xref,a .rst-content tt{font-weight:bold}.rst-content a tt{color:#6f9f3f}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#D4E8BF;color:#6f9f3f;border-top:solid 3px #6f9f3f;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6f9f3f}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:gray}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}\n/*# sourceMappingURL=theme.css.map */\n"
  },
  {
    "path": "sphinx_rtd_theme/static/js/theme.js",
    "content": "$( document ).ready(function() {\n    // Shift nav in mobile when clicking the menu.\n    $(document).on('click', \"[data-toggle='wy-nav-top']\", function() {\n      $(\"[data-toggle='wy-nav-shift']\").toggleClass(\"shift\");\n      $(\"[data-toggle='rst-versions']\").toggleClass(\"shift\");\n    });\n    // Close menu when you click a link.\n    $(document).on('click', \".wy-menu-vertical .current ul li a\", function() {\n      $(\"[data-toggle='wy-nav-shift']\").removeClass(\"shift\");\n      $(\"[data-toggle='rst-versions']\").toggleClass(\"shift\");\n    });\n    $(document).on('click', \"[data-toggle='rst-current-version']\", function() {\n      $(\"[data-toggle='rst-versions']\").toggleClass(\"shift-up\");\n    });  \n    // Make tables responsive\n    $(\"table.docutils:not(.field-list)\").wrap(\"<div class='wy-table-responsive'></div>\");\n});\n\nwindow.SphinxRtdTheme = (function (jquery) {\n    var stickyNav = (function () {\n        var navBar,\n            win,\n            stickyNavCssClass = 'stickynav',\n            applyStickNav = function () {\n                if (navBar.height() <= win.height()) {\n                    navBar.addClass(stickyNavCssClass);\n                } else {\n                    navBar.removeClass(stickyNavCssClass);\n                }\n            },\n            enable = function () {\n                applyStickNav();\n                win.on('resize', applyStickNav);\n            },\n            init = function () {\n                navBar = jquery('nav.wy-nav-side:first');\n                win    = jquery(window);\n            };\n        jquery(init);\n        return {\n            enable : enable\n        };\n    }());\n    return {\n        StickyNav : stickyNav\n    };\n}($));\n"
  },
  {
    "path": "sphinx_rtd_theme/theme.conf",
    "content": "[theme]\ninherit = basic\nstylesheet = css/theme.css\n\n[options]\ntypekit_id = hiw1hhg\nanalytics_id = \nsticky_navigation = False\n"
  },
  {
    "path": "sphinx_rtd_theme/versions.html",
    "content": "{% if READTHEDOCS %}\n{# Add rst-badge after rst-versions for small badge style. #}\n  <div class=\"rst-versions\" data-toggle=\"rst-versions\" role=\"note\" aria-label=\"versions\">\n    <span class=\"rst-current-version\" data-toggle=\"rst-current-version\">\n      <span class=\"fa fa-book\"> Read the Docs</span>\n      v: {{ current_version }}\n      <span class=\"fa fa-caret-down\"></span>\n    </span>\n    <div class=\"rst-other-versions\">\n      <dl>\n        <dt>Versions</dt>\n        {% for slug, url in versions %}\n          <dd><a href=\"{{ url }}\">{{ slug }}</a></dd>\n        {% endfor %}\n      </dl>\n      <dl>\n        <dt>Downloads</dt>\n        {% for type, url in downloads %}\n          <dd><a href=\"{{ url }}\">{{ type }}</a></dd>\n        {% endfor %}\n      </dl>\n      <dl>\n        <dt>On Read the Docs</dt>\n          <dd>\n            <a href=\"//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}\">Project Home</a>\n          </dd>\n          <dd>\n            <a href=\"//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}\">Builds</a>\n          </dd>\n      </dl>\n      <hr/>\n      Free document hosting provided by <a href=\"http://www.readthedocs.org\">Read the Docs</a>.\n\n    </div>\n  </div>\n{% endif %}\n\n"
  },
  {
    "path": "structural_patterns/adapter.rst",
    "content": ".. _adapter:\n\n适配器模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n- 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。\n- 通常情况下，客户端可以通过目标类的接口访问它所提供的服务。有时，现有的类可以满足客户类的功能需要，但是它所提供的接口不一定是客户类所期望的，这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。\n- 在这种情况下，现有的接口需要转化为客户类期望的接口，这样保证了对现有类的重用。如果不进行这样的转化，客户类就不能利用现有类所提供的功能，适配器模式可以完成这样的转化。\n- 在适配器模式中可以定义一个包装类，包装不兼容接口的对象，这个包装类指的就是适配器(Adapter)，它所包装的对象就是适配者(Adaptee)，即被适配的类。\n- 适配器提供客户类需要的接口，适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说：当客户类调用适配器的方法时，在适配器类的内部将调用适配者类的方法，而这个过程对客户类是透明的，客户类并不直接访问适配者类。因此，适配器可以使由于接口不兼容而不能交互的类可以一起工作。这就是适配器模式的模式动机。\n\n模式定义\n--------------------\n适配器模式(Adapter Pattern) ：将一个接口转换成客户希望的另一个接口，适配器模式使接口不兼容的那些类可以一起工作，其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式，也可以作为对象结构型模式。\n\n\n\n模式结构\n--------------------\n适配器模式包含如下角色：\n\n- Target：目标抽象类\n- Adapter：适配器类\n- Adaptee：适配者类\n- Client：客户类\n\n适配器模式有对象适配器和类适配器两种实现：\n\n对象适配器：\n\n.. image:: /_static/Adapter.jpg\n\n\n类适配器：\n\n.. image:: /_static/Adapter_classModel.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Adapter.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Adapter/main.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 10-12\n\n.. literalinclude:: /code/Adapter/Adapter.h\n   :language: cpp\n   :linenos:\n\n.. literalinclude:: /code/Adapter/Adapter.cpp\n   :language: cpp\n   :linenos:\n   :emphasize-lines: 19\n   \n\n.. literalinclude:: /code/Adapter/Adaptee.h\n   :language: cpp\n   :linenos:\n\n.. literalinclude:: /code/Adapter/Adapte.cpp\n   :language: cpp\n   :linenos:\n\n运行结果：\n\n.. image:: /_static/Adapter_run.jpg\n\n模式分析\n--------------------\n\n实例\n--------------------\n\n优点\n--------------------\n- 将目标类和适配者类解耦，通过引入一个适配器类来重用现有的适配者类，而无须修改原有代码。\n- 增加了类的透明性和复用性，将具体的实现封装在适配者类中，对于客户端类来说是透明的，而且提高了适配者的复用性。\n- 灵活性和扩展性都非常好，通过使用配置文件，可以很方便地更换适配器，也可以在不修改原有代码的基础上增加新的适配器类，完全符合“开闭原则”。\n\n类适配器模式还具有如下优点：\n    由于适配器类是适配者类的子类，因此可以在适配器类中置换一些适配者的方法，使得适配器的灵活性更强。\n\n对象适配器模式还具有如下优点：\n    一个对象适配器可以把多个不同的适配者适配到同一个目标，也就是说，同一个适配器可以把适配者类和它的子类都适配到目标接口。\n\n\n\n缺点\n--------------------\n类适配器模式的缺点如下：\n    对于Java、C#等不支持多重继承的语言，一次最多只能适配一个适配者类，而且目标抽象类只能为抽象类，不能为具体类，其使用有一定的局限性，不能将一个适配者类和它的子类都适配到目标接口。\n\n对象适配器模式的缺点如下：\n    与类适配器模式相比，要想置换适配者类的方法就不容易。如果一定要置换掉适配者类的一个或多个方法，就只好先做一个适配者类的子类，将适配者类的方法置换掉，然后再把适配者类的子类当做真正的适配者进行适配，实现过程较为复杂。\n\n\n适用环境\n--------------------\n在以下情况下可以使用适配器模式：\n\n- 系统需要使用现有的类，而这些类的接口不符合系统的需要。\n- 想要建立一个可以重复使用的类，用于与一些彼此之间没有太大关联的一些类，包括一些可能在将来引进的类一起工作。\n\n\n模式应用\n--------------------\nSun公司在1996年公开了Java语言的数据库连接工具JDBC，JDBC使得Java语言程序能够与数据库连接，并使用SQL语言来查询和操作数据。JDBC给出一个客户端通用的抽象接口，每一个具体数据库引擎（如SQL Server、Oracle、MySQL等）的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件。抽象的JDBC接口和各个数据库引擎API之间都需要相应的适配器软件，这就是为各个不同数据库引擎准备的驱动程序。\n\n\n模式扩展\n--------------------\n认适配器模式(Default Adapter Pattern)或缺省适配器模式\n    当不需要全部实现接口提供的方法时，可先设计一个抽象类实现接口，并为该接口中每个方法提供一个默认实现（空方法），那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求，它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。\n\n\n总结\n--------------------\n- 结构型模式描述如何将类或者对象结合在一起形成更大的结构。\n- 适配器模式用于将一个接口转换成客户希望的另一个接口，适配器模式使接口不兼容的那些类可以一起工作，其别名为包装器。适配器模式既可以作为类结构型模式，也可以作为对象结构型模式。\n- 适配器模式包含四个角色：目标抽象类定义客户要用的特定领域的接口；适配器类可以调用另一个接口，作为一个转换器，对适配者和抽象目标类进行适配，它是适配器模式的核心；适配者类是被适配的角色，它定义了一个已经存在的接口，这个接口需要适配；在客户类中针对目标抽象类进行编程，调用在目标抽象类中定义的业务方法。\n- 在类适配器模式中，适配器类实现了目标抽象类接口并继承了适配者类，并在目标抽象类的实现方法中调用所继承的适配者类的方法；在对象适配器模式中，适配器类继承了目标抽象类并定义了一个适配者类的对象实例，在所继承的目标抽象类方法中调用适配者类的相应业务方法。\n- 适配器模式的主要优点是将目标类和适配者类解耦，增加了类的透明性和复用性，同时系统的灵活性和扩展性都非常好，更换适配器或者增加新的适配器都非常方便，符合“开闭原则”；类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类，对象适配器模式的缺点是很难置换适配者类的方法。\n- 适配器模式适用情况包括：系统需要使用现有的类，而这些类的接口不符合系统的需要；想要建立一个可以重复使用的类，用于与一些彼此之间没有太大关联的一些类一起工作。\n"
  },
  {
    "path": "structural_patterns/bridge.rst",
    "content": ".. _bridge:\n\n桥接模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n设想如果要绘制矩形、圆形、椭圆、正方形，我们至少需要4个形状类，但是如果绘制的图形需要具有不同的颜色，如红色、绿色、蓝色等，此时至少有如下两种设计方案：\n\n- 第一种设计方案是为每一种形状都提供一套各种颜色的版本。\n- 第二种设计方案是根据实际需要对形状和颜色进行组合\n\n对于有两个变化维度（即两个变化的原因）的系统，采用方案二来进行设计系统中类的个数更少，且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系，从而降低了类与类之间的耦合，减少了代码编写量。\n\n\n模式定义\n--------------------\n桥接模式(Bridge Pattern)：将抽象部分与它的实现部分分离，使它们都可以独立地变化。它是一种对象结构型模式，又称为柄体(Handle and Body)模式或接口(Interface)模式。\n\n\n模式结构\n--------------------\n桥接模式包含如下角色：\n\n- Abstraction：抽象类\n- RefinedAbstraction：扩充抽象类\n- Implementor：实现类接口\n- ConcreteImplementor：具体实现类\n\n\n.. image:: /_static/Bridge.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Bridge.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Bridge/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 12-17\n\n.. literalinclude:: /code/Bridge/RefinedAbstraction.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Bridge/RefinedAbstraction.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 26-28\n\n运行结果：\n\n.. image:: /_static/Bridge_run.jpg\n\n\n模式分析\n--------------------\n理解桥接模式，重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦，使得二者可以独立地变化。\n\n- 抽象化：抽象化就是忽略一些信息，把不同的实体当作同样的实体对待。在面向对象中，将对象的共同性质抽取出来形成类的过程即为抽象化的过程。\n- 实现化：针对抽象化给出的具体实现，就是实现化，抽象化与实现化是一对互逆的概念，实现化产生的对象比抽象化更具体，是对抽象化事物的进一步具体化的产物。\n- 脱耦：脱耦就是将抽象化和实现化之间的耦合解脱开，或者说是将它们之间的强关联改换成弱关联，将两个角色之间的继承关系改为关联关系。桥接模式中的所谓脱耦，就是指在一个软件系统的抽象化和实现化之间使用关联关系（组合或者聚合关系）而不是继承关系，从而使两者可以相对独立地变化，这就是桥接模式的用意。\n\n\n实例\n--------------------\n如果需要开发一个跨平台视频播放器，可以在不同操作系统平台（如Windows、Linux、Unix等）上播放多种格式的视频文件，常见的视频格式包括MPEG、RMVB、AVI、WMV等。现使用桥接模式设计该播放器。\n\n\n优点\n--------------------\n桥接模式的优点:\n\n- 分离抽象接口及其实现部分。\n- 桥接模式有时类似于多继承方案，但是多继承方案违背了类的单一职责原则（即一个类只有一个变化的原因），复用性比较差，而且多继承结构中类的个数非常庞大，桥接模式是比多继承方案更好的解决方法。\n- 桥接模式提高了系统的可扩充性，在两个变化维度中任意扩展一个维度，都不需要修改原有系统。\n- 实现细节对客户透明，可以对用户隐藏实现细节。\n\n\n缺点\n--------------------\n桥接模式的缺点:\n\n- 桥接模式的引入会增加系统的理解与设计难度，由于聚合关联关系建立在抽象层，要求开发者针对抽象进\n行设计与编程。\n- 桥接模式要求正确识别出系统中两个独立变化的维度，因此其使用范围具有一定的局限性。\n\n\n适用环境\n--------------------\n在以下情况下可以使用桥接模式：\n\n- 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性，避免在两个层次之间建立静态的继承联系，通过桥接模式可以使它们在抽象层建立一个关联关系。\n- 抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响，在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合，即系统需要对抽象化角色和实现化角色进行动态耦合。\n- 一个类存在两个独立变化的维度，且这两个维度都需要进行扩展。\n- 虽然在系统中使用继承是没有问题的，但是由于抽象化角色和具体化角色需要独立变化，设计要求需要独立管理这两者。\n- 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统，桥接模式尤为适用。\n\n\n模式应用\n--------------------\n一个Java桌面软件总是带有所在操作系统的视感(LookAndFeel)，如果一个Java软件是在Unix系统上开发的，那么开发人员看到的是Motif用户界面的视感；在Windows上面使用这个系统的用户看到的是Windows用户界面的视感；而一个在Macintosh上面使用的用户看到的则是Macintosh用户界面的视感，Java语言是通过所谓的Peer架构做到这一点的。Java为AWT中的每一个GUI构件都提供了一个Peer构件，在AWT中的Peer架构就使用了桥接模式\n\n\n模式扩展\n--------------------\n适配器模式与桥接模式的联用:\n\n- 桥接模式和适配器模式用于设计的不同阶段，桥接模式用于系统的初步设计，对于存在两个独立变化维度的类可以将其分为抽象化和实现化两个角色，使它们可以分别进行变化；而在初步设计完成之后，当发现系统与已有类无法协同工作时，可以采用适配器模式。但有时候在设计初期也需要考虑适配器模式，特别是那些涉及到大量第三方应用接口的情况。\n\n\n总结\n--------------------\n- 桥接模式将抽象部分与它的实现部分分离，使它们都可以独立地变化。它是一种对象结构型模式，又称为柄体(Handle and Body)模式或接口(Interface)模式。\n- 桥接模式包含如下四个角色：抽象类中定义了一个实现类接口类型的对象并可以维护该对象；扩充抽象类扩充由抽象类定义的接口，它实现了在抽象类中定义的抽象业务方法，在扩充抽象类中可以调用在实现类接口中定义的业务方法；实现类接口定义了实现类的接口，实现类接口仅提供基本操作，而抽象类定义的接口可能会做更多更复杂的操作；具体实现类实现了实现类接口并且具体实现它，在不同的具体实现类中提供基本操作的不同实现，在程序运行时，具体实现类对象将替换其父类对象，提供给客户端具体的业务操作方法。\n- 在桥接模式中，抽象化(Abstraction)与实现化(Implementation)脱耦，它们可以沿着各自的维度独立变化。\n- 桥接模式的主要优点是分离抽象接口及其实现部分，是比多继承方案更好的解决方法，桥接模式还提高了系统的可扩充性，在两个变化维度中任意扩展一个维度，都不需要修改原有系统，实现细节对客户透明，可以对用户隐藏实现细节；其主要缺点是增加系统的理解与设计难度，且识别出系统中两个独立变化的维度并不是一件容易的事情。\n- 桥接模式适用情况包括：需要在构件的抽象化角色和具体化角色之间增加更多的灵活性，避免在两个层次之间建立静态的继承联系；抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响；一个类存在两个独立变化的维度，且这两个维度都需要进行扩展；设计要求需要独立管理抽象化角色和具体化角色；不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统。\n\n"
  },
  {
    "path": "structural_patterns/decorator.rst",
    "content": ".. _decorator:\n\n装饰模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n一般有两种方式可以实现给一个类或对象增加行为：\n\n- 继承机制，使用继承机制是给现有类添加功能的一种有效途径，通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的，用户不能控制增加行为的方式和时机。\n- 关联机制，即将一个类的对象嵌入另一个对象中，由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为，我们称这个嵌入的对象为装饰器(Decorator)\n\n装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任，换言之，客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不需要创造更多子类的情况下，将对象的功能加以扩展。这就是装饰模式的模式动机。\n\n\n模式定义\n--------------------\n装饰模式(Decorator Pattern) ：动态地给一个对象增加一些额外的职责(Responsibility)，就增加对象功能来说，装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper)，与适配器模式的别名相同，但它们适用于不同的场合。根据翻译的不同，装饰模式也有人称之为“油漆工模式”，它是一种对象结构型模式。\n\n\n模式结构\n--------------------\n装饰模式包含如下角色：\n\n- Component: 抽象构件\n- ConcreteComponent: 具体构件\n- Decorator: 抽象装饰类\n- ConcreteDecorator: 具体装饰类\n\n\n.. image:: /_static/Decorator.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Decorator.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Decorator/main.cpp\n    :language: cpp\n    :linenos:\n    :lines: 1-\n    :emphasize-lines: 10-16\n\n.. literalinclude:: /code/Decorator/ConcreteComponent.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Decorator/ConcreteDecoratorA.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Decorator/ConcreteDecoratorA.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 22-30\n\n运行结果：\n\n.. image:: /_static/Decorator_run.jpg\n\n模式分析\n--------------------\n- 与继承关系相比，关联关系的主要优势在于不会破坏类的封装性，而且继承是一种耦合度较大的静态关系，无法在程序运行时动态扩展。在软件开发阶段，关联关系虽然不会比继承关系减少编码量，但是到了软件维护阶段，由于关联关系使系统具有较好的松耦合性，因此使得系统更加容易维护。当然，关联关系的缺点是比继承关系要创建更多的对象。\n- 使用装饰模式来实现扩展比继承更加灵活，它以对客户透明的方式动态地给一个对象附加更多的责任。装饰模式可以在不需要创造更多子类的情况下，将对象的功能加以扩展。\n\n\n实例\n--------------------\n实例：变形金刚\n\n变形金刚在变形之前是一辆汽车，它可以在陆地上移动。当它变成机器人之后除了能够在陆地上移动之外，还可以说话；如果需要，它还可以变成飞机，除了在陆地上移动还可以在天空中飞翔。\n\n.. image:: /_static/Decorator_eg.jpg\n\n.. image:: /_static/seq_Decorator_eg.jpg\n\n\n\n优点\n--------------------\n装饰模式的优点:\n\n- 装饰模式与继承关系的目的都是要扩展对象的功能，但是装饰模式可以提供比继承更多的灵活性。\n- 可以通过一种动态的方式来扩展一个对象的功能，通过配置文件可以在运行时选择不同的装饰器，从而实现不同的行为。\n- 通过使用不同的具体装饰类以及这些装饰类的排列组合，可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象，得到功能更为强大的对象。\n- 具体构件类与具体装饰类可以独立变化，用户可以根据需要增加新的具体构件类和具体装饰类，在使用时再对其进行组合，原有代码无须改变，符合“开闭原则”\n\n\n缺点\n--------------------\n装饰模式的缺点:\n\n- 使用装饰模式进行系统设计时将产生很多小对象，这些对象的区别在于它们之间相互连接的方式有所不同，而不是它们的类或者属性值有所不同，同时还将产生很多具体装饰类。这些装饰类和小对象的产生将增加系统的复杂度，加大学习与理解的难度。\n- 这种比继承更加灵活机动的特性，也同时意味着装饰模式比继承更加易于出错，排错也很困难，对于多次装饰的对象，调试时寻找错误可能需要逐级排查，较为烦琐。\n\n\n适用环境\n--------------------\n在以下情况下可以使用装饰模式：\n\n- 在不影响其他对象的情况下，以动态、透明的方式给单个对象添加职责。\n- 需要动态地给一个对象增加功能，这些功能也可以动态地被撤销。\n- 当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。不能采用继承的情况主要有两类：第一类是系统中存在大量独立的扩展，为支持每一种组合将产生大量的子类，使得子类数目呈爆炸性增长；第二类是因为类定义不能继承（如final类）.\n\n\n模式应用\n--------------------\n\n模式扩展\n--------------------\n装饰模式的简化-需要注意的问题:\n\n- 一个装饰类的接口必须与被装饰类的接口保持相同，对于客户端来说无论是装饰之前的对象还是装饰之后的对象都可以一致对待。\n- 尽量保持具体构件类Component作为一个“轻”类，也就是说不要把太多的逻辑和状态放在具体构件类中，可以通过装饰类\n对其进行扩展。\n- 如果只有一个具体构件类而没有抽象构件类，那么抽象装饰类可以作为具体构件类的直接子类。 \n\n总结\n--------------------\n- 装饰模式用于动态地给一个对象增加一些额外的职责，就增加对象功 能来说，装饰模式比生成子类实现更为灵活。它是一种对象结构型模 式。\n- 装饰模式包含四个角色：抽象构件定义了对象的接口，可以给这些对 象动态增加职责（方法）；具体构件定义了具体的构件对象，实现了 在抽象构件中声明的方法，装饰器可以给它增加额外的职责（方法）； 抽象装饰类是抽象构件类的子类，用于给具体构件增加职责，但是具 体职责在其子类中实现；具体装饰类是抽象装饰类的子类，负责向构 件添加新的职责。\n- 使用装饰模式来实现扩展比继承更加灵活，它以对客户透明的方式动 态地给一个对象附加更多的责任。装饰模式可以在不需要创造更多子 类的情况下，将对象的功能加以扩展。\n- 装饰模式的主要优点在于可以提供比继承更多的灵活性，可以通过一种动态的 方式来扩展一个对象的功能，并通过使用不同的具体装饰类以及这些装饰类的 排列组合，可以创造出很多不同行为的组合，而且具体构件类与具体装饰类可 以独立变化，用户可以根据需要增加新的具体构件类和具体装饰类；其主要缺 点在于使用装饰模式进行系统设计时将产生很多小对象，而且装饰模式比继承 更加易于出错，排错也很困难，对于多次装饰的对象，调试时寻找错误可能需 要逐级排查，较为烦琐。\n- 装饰模式适用情况包括：在不影响其他对象的情况下，以动态、透明的方式给 单个对象添加职责；需要动态地给一个对象增加功能，这些功能也可以动态地 被撤销；当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展 和维护时。\n- 装饰模式可分为透明装饰模式和半透明装饰模式：在透明装饰模式中，要求客 户端完全针对抽象编程，装饰模式的透明性要求客户端程序不应该声明具体构 件类型和具体装饰类型，而应该全部声明为抽象构件类型；半透明装饰模式允 许用户在客户端声明具体装饰者类型的对象，调用在具体装饰者中新增的方法。\n\n\n"
  },
  {
    "path": "structural_patterns/facade.rst",
    "content": ".. _facade:\n\n外观模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n\n模式定义\n--------------------\n外观模式(Facade Pattern)：外部与一个子系统的通信必须通过一个统一的外观对象进行，为子系统中的一组接口提供一个一致的界面，外观模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。外观模式又称为门面模式，它是一种对象结构型模式。\n\n\n模式结构\n--------------------\n外观模式包含如下角色：\n\n- Facade: 外观角色\n- SubSystem:子系统角色\n\n\n.. image:: /_static/Facade.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Facade.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Facade/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 7-8\n\n.. literalinclude:: /code/Facade/Facade.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Facade/Facade.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 25-29\n\n运行结果：\n\n.. image:: /_static/Facade_run.jpg\n\n\n\n模式分析\n--------------------\n根据“单一职责原则”，在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性，一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小，而达到该目标的途径之一就是引入一个外观对象，它为子系统的访问提供了一个简单而单一的入口。\n-外观模式也是“迪米特法则”的体现，通过引入一个新的外观类可以降低原有系统的复杂度，同时降低客户类与子系统类的耦合度。\n- 外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行，外观类将客户端与子系统的内部复杂性分隔开，使得客户端只需要与外观对象打交道，而不需要与子系统内部的很多对象打交道。\n-外观模式的目的在于降低系统的复杂程度。\n-外观模式从很大程度上提高了客户端使用的便捷性，使得客户端无须关心子系统的工作细节，通过外观角色即可调用相关功能。\n\n实例\n--------------------\n\n优点\n--------------------\n外观模式的优点\n\n- 对客户屏蔽子系统组件，减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式，客户代码将变得很简单，与之关联的对象也很少。\n- 实现了子系统与客户之间的松耦合关系，这使得子系统的组件变化不会影响到调用它的客户类，只需要调整外观类即可。\n- 降低了大型软件系统中的编译依赖性，并简化了系统在不同平台之间的移植过程，因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响，而且子系统内部变化也不会影响到外观对象。\n- 只是提供了一个访问子系统的统一入口，并不影响用户直接使用子系统类。\n\n\n缺点\n--------------------\n外观模式的缺点\n\n- 不能很好地限制客户使用子系统类，如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。\n- 在不引入抽象外观类的情况下，增加新的子系统可能需要修改外观类或客户端的源代码，违背了“开闭原则”。\n\n\n适用环境\n--------------------\n在以下情况下可以使用外观模式：\n\n- 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求，而且用户也可以越过外观类直接访问子系统。\n- 客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦，可以提高子系统的独立性和可移植性。\n- 在层次化结构中，可以使用外观模式定义系统中每一层的入口，层与层之间不直接产生联系，而通过外观类建立联系，降低层之间的耦合度。\n\n\n模式应用\n--------------------\n\n模式扩展\n--------------------\n一个系统有多个外观类\n    在外观模式中，通常只需要一个外观类，并且此外观类只有一个实例，换言之它是一个单例类。在很多情况下为了节约系统资源，一般将外观类设计为单例类。当然这并不意味着在整个系统里只能有一个外观类，在一个系统中可以设计多个外观类，每个外观类都负责和一些特定的子系统交互，向用户提供相应的业务功能。\n\n不要试图通过外观类为子系统增加新行为\n    不要通过继承一个外观类在子系统中加入新的行为，这种做法是错误的。外观模式的用意是为子系统提供一个集中化和简化的沟通渠道，而不是向子系统加入新的行为，新的行为的增加应该通过修改原有子系统类或增加新的子系统类来实现，不能通过外观类来实现。\n\n外观模式与迪米特法则\n    外观模式创造出一个外观对象，将客户端所涉及的属于一个子系统的协作伙伴的数量减到最少，使得客户端与子系统内部的对象的相互作用被外观对象所取代。外观类充当了客户类与子系统类之间的“第三者”，降低了客户类与子系统类之间的耦合度，外观模式就是实现代码重构以便达到“迪米特法则”要求的一个强有力的武器。\n\n抽象外观类的引入\n    外观模式最大的缺点在于违背了“开闭原则”，当增加新的子系统或者移除子系统时需要修改外观类，可以通过引入抽象外观类在一定程度上解决该问题，客户端针对抽象外观类进行编程。对于新的业务需求，不修改原有外观类，而对应增加一个新的具体外观类，由新的具体外观类来关联新的子系统对象，同时通过修改配置文件来达到不修改源代码并更换外观类的目的。\n\n总结\n--------------------\n- 在外观模式中，外部与一个子系统的通信必须通过一个统一的外观对象进行，为子系统中的一组接口提供一个一致的界面，外观模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。外观模式又称为门面模式，它是一种对象结构型模式。\n- 外观模式包含两个角色：外观角色是在客户端直接调用的角色，在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任，它将所有从客户端发来的请求委派到相应的子系统去，传递给相应的子系统对象处理；在软件系统中可以同时有一个或者多个子系统角色，每一个子系统可以不是一个单独的类，而是一个类的集合，它实现子系统的功能。\n- 外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行，外观类将客户端与子系统的内部复杂性分隔开，使得客户端只需要与外观对象打交道，而不需要与子系统内部的很多对象打交道。\n- 外观模式主要优点在于对客户屏蔽子系统组件，减少了客户处理的对象数目并使得子系统使用起来更加容易，它实现了子系统与客户之间的松耦合关系，并降低了大型软件系统中的编译依赖性，简化了系统在不同平台之间的移植过程；其缺点在于不能很好地限制客户使用子系统类，而且在不引入抽象外观类的情况下，增加新的子系统可能需要修改外观类或客户端的源代码，违背了“开闭原则”。\n- 外观模式适用情况包括：要为一个复杂子系统提供一个简单接口；客户程序与多个子系统之间存在很大的依赖性；在层次化结构中，需要定义系统中每一层的入口，使得层与层之间不直接产生联系。\n"
  },
  {
    "path": "structural_patterns/flyweight.rst",
    "content": ".. _flyweight:\n\n享元模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n面向对象技术可以很好地解决一些灵活性或可扩展性问题，但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时，将导致运行代价过高，带来性能下降等问题。\n\n- 享元模式正是为解决这一类问题而诞生的。享元模式通过共享技术实现相同或相似对象的重用。\n- 在享元模式中可以共享的相同内容称为内部状态(IntrinsicState)，而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State)，由于区分了内部状态和外部状态，因此可以通过设置不同的外部状态使得相同的对象可以具有一些不同的特征，而相同的内部状态是可以共享的。\n- 在享元模式中通常会出现工厂模式，需要创建一个享元工厂来负责维护一个享元池(Flyweight Pool)用于存储具有相同内部状态的享元对象。\n- 在享元模式中共享的是享元对象的内部状态，外部状态需要通过环境来设置。在实际使用中，能够共享的内部状态是有限的，因此享元对象一般都设计为较小的对象，它所包含的内部状态较少，这种对象也称为细粒度对象。享元模式的目的就是使用共享技术来实现大量细粒度对象的复用。\n\n模式定义\n--------------------\n享元模式(Flyweight Pattern)：运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象，而这些对象都很相似，状态变化很小，可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象，因此它又称为轻量级模式，它是一种对象结构型模式。\n\n模式结构\n--------------------\n享元模式包含如下角色：\n\n- Flyweight: 抽象享元类\n- ConcreteFlyweight: 具体享元类\n- UnsharedConcreteFlyweight: 非共享具体享元类\n- FlyweightFactory: 享元工厂类\n\n\n.. image:: /_static/Flyweight.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Flyweight.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Flyweight/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 9-17\n\n.. literalinclude:: /code/Flyweight/FlyweightFactory.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 23-35\n\n.. literalinclude:: /code/Flyweight/ConcreteFlyweight.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Flyweight/ConcreteFlyweight.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n运行结果：\n\n.. image:: /_static/Flyweight_run.jpg\n\n模式分析\n--------------------\n享元模式是一个考虑系统性能的设计模式，通过使用享元模式可以节约内存空间，提高系统的性能。\n\n享元模式的核心在于享元工厂类，享元工厂类的作用在于提供一个用于存储享元对象的享元池，用户需要对象时，首先从享元池中获取，如果享元池中不存在，则创建一个新的享元对象返回给用户，并在享元池中保存该新增对象。\n\n享元模式以共享的方式高效地支持大量的细粒度对象，享元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(External State)。\n\n- 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态，因此内部状态可以共享。\n- 外部状态是随环境改变而改变的、不可以共享的状态。享元对象的外部状态必须由客户端保存，并在享元对象被创建之后，在需要使用的时候再传入到享元对象内部。一个外部状态与另一个外部状态之间是相互独立的。\n\n实例\n--------------------\n\n优点\n--------------------\n享元模式的优点\n\n- 享元模式的优点在于它可以极大减少内存中对象的数量，使得相同对象或相似对象在内存中只保存一份。\n- 享元模式的外部状态相对独立，而且不会影响其内部状态，从而使得享元对象可以在不同的环境中被共享。\n\n缺点\n--------------------\n享元模式的缺点\n\n- 享元模式使得系统更加复杂，需要分离出内部状态和外部状态，这使得程序的逻辑复杂化。\n- 为了使对象可以共享，享元模式需要将享元对象的状态外部化，而读取外部状态使得运行时间变长。\n\n适用环境\n--------------------\n在以下情况下可以使用享元模式：\n\n- 一个系统有大量相同或者相似的对象，由于这类对象的大量使用，造成内存的大量耗费。\n- 对象的大部分状态都可以外部化，可以将这些外部状态传入对象中。\n- 使用享元模式需要维护一个存储享元对象的享元池，而这需要耗费资源，因此，应当在多次重复使用享元对象时才值得使用享元模式。\n\n\n模式应用\n--------------------\n享元模式在编辑器软件中大量使用，如在一个文档中多次出现相同的图片，则只需要创建一个图片对象，通过在应用程序中设置该图片出现的位置，可以实现该图片在不同地方多次重复显示。\n\n模式扩展\n--------------------\n单纯享元模式和复合享元模式\n\n- 单纯享元模式：在单纯享元模式中，所有的享元对象都是可以共享的，即所有抽象享元类的子类都可共享，不存在非共享具体享元类。\n- 复合享元模式：将一些单纯享元使用组合模式加以组合，可以形成复合享元对象，这样的复合享元对象本身不能共享，但是它们可以分解成单纯享元对象，而后者则可以共享。\n\n享元模式与其他模式的联用\n\n- 在享元模式的享元工厂类中通常提供一个静态的工厂方法用于返回享元对象，使用简单工厂模式来生成享元对象。\n- 在一个系统中，通常只有唯一一个享元工厂，因此享元工厂类可以使用单例模式进行设计。\n- 享元模式可以结合组合模式形成复合享元模式，统一对享元对象设置外部状态。\n\n\n总结\n--------------------\n- 享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象，而这些对象都很相似，状态变化很小，可以实现对象的多次复用，它是一种对象结构型模式。\n- 享元模式包含四个角色：抽象享元类声明一个接口，通过它可以接受并作用于外部状态；具体享元类实现了抽象享元接口，其实例称为享元对象；非共享具体享元是不能被共享的抽象享元类的子类；享元工厂类用于创建并管理享元对象，它针对抽象享元类编程，将各种类型的具体享元对象存储在一个享元池中。\n- 享元模式以共享的方式高效地支持大量的细粒度对象，享元对象能做到共享的关键是区分内部状态和外部状态。其中内部状态是存储在享元对象内部并且不会随环境改变而改变的状态，因此内部状态可以共享；外部状态是随环境改变而改变的、不可以共享的状态。\n- 享元模式主要优点在于它可以极大减少内存中对象的数量，使得相同对象或相似对象在内存中只保存一份；其缺点是使得系统更加复杂，并且需要将享元对象的状态外部化，而读取外部状态使得运行时间变长。\n- 享元模式适用情况包括：一个系统有大量相同或者相似的对象，由于这类对象的大量使用，造成内存的大量耗费；对象的大部分状态都可以外部化，可以将这些外部状态传入对象中；多次重复使用享元对象。\n"
  },
  {
    "path": "structural_patterns/proxy.rst",
    "content": ".. _proxy:\n\n代理模式\n====================\n\n.. contents:: 目录\n\n模式动机\n--------------------\n在某些情况下，一个客户不想或者不能直接引用一个对 象，此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用，并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。\n\n通过引入一个新的对象（如小图片和远程代理 对象）来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身，这种实现机制即 为代理模式，通过引入代理对象来间接访问一 个对象，这就是代理模式的模式动机。\n\n\n模式定义\n--------------------\n代理模式(Proxy Pattern) ：给某一个对象提供一个代 理，并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate，它是一种对象结构型模式。\n\n\n模式结构\n--------------------\n代理模式包含如下角色：\n\n- Subject: 抽象主题角色\n- Proxy: 代理主题角色\n- RealSubject: 真实主题角色\n\n.. image:: /_static/Proxy.jpg\n\n\n时序图\n--------------------\n.. image:: /_static/seq_Proxy.jpg\n\n代码分析\n--------------------\n.. literalinclude:: /code/Proxy/main.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n\n.. literalinclude:: /code/Proxy/Proxy.h\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 24-26\n\n.. literalinclude:: /code/Proxy/Proxy.cpp\n   :language: cpp\n   :linenos:\n   :lines: 1-\n   :emphasize-lines: 14-16,33-37\n\n运行结果：\n\n.. image:: /_static/Proxy_run.jpg\n\n模式分析\n--------------------\n\n实例\n--------------------\n\n优点\n--------------------\n代理模式的优点\n\n- 代理模式能够协调调用者和被调用者，在一定程度上降低了系 统的耦合度。\n- 远程代理使得客户端可以访问在远程机器上的对象，远程机器 可能具有更好的计算性能与处理速度，可以快速响应并处理客户端请求。\n- 虚拟代理通过使用一个小对象来代表一个大对象，可以减少系 统资源的消耗，对系统进行优化并提高运行速度。\n- 保护代理可以控制对真实对象的使用权限。\n\n\n\n缺点\n--------------------\n代理模式的缺点\n\n- 由于在客户端和真实主题之间增加了代理对象，因此 有些类型的代理模式可能会造成请求的处理速度变慢。\n- 实现代理模式需要额外的工作，有些代理模式的实现 非常复杂。\n\n\n适用环境\n--------------------\n根据代理模式的使用目的，常见的代理模式有以下几种类型：\n\n- 远程(Remote)代理：为一个位于不同的地址空间的对象提供一个本地 的代理对象，这个不同的地址空间可以是在同一台主机中，也可是在 另一台主机中，远程代理又叫做大使(Ambassador)。\n- 虚拟(Virtual)代理：如果需要创建一个资源消耗较大的对象，先创建一个消耗相对较小的对象来表示，真实对象只在需要时才会被真正创建。\n- Copy-on-Write代理：它是虚拟代理的一种，把复制（克隆）操作延迟 到只有在客户端真正需要时才执行。一般来说，对象的深克隆是一个 开销较大的操作，Copy-on-Write代理可以让这个操作延迟，只有对象被用到的时候才被克隆。\n- 保护(Protect or Access)代理：控制对一个对象的访问，可以给不同的用户提供不同级别的使用权限。\n- 缓冲(Cache)代理：为某一个目标操作的结果提供临时的存储空间，以便多个客户端可以共享这些结果。\n- 防火墙(Firewall)代理：保护目标不让恶意用户接近。\n- 同步化(Synchronization)代理：使几个用户能够同时使用一个对象而没有冲突。\n- 智能引用(Smart Reference)代理：当一个对象被引用时，提供一些额外的操作，如将此对象被调用的次数记录下来等。\n\n\n模式应用\n--------------------\nEJB、Web Service等分布式技术都是代理模式的应用。在EJB中使用了RMI机制，远程服务器中的企业级Bean在本地有一个桩代理，客户端通过桩来调用远程对象中定义的方法，而无须直接与远程对象交互。在EJB的使用中需要提供一个公共的接口，客户端针对该接口进行编程，无须知道桩以及远程EJB的实现细节。\n\n\n模式扩展\n--------------------\n几种常用的代理模式\n\n- 图片代理：一个很常见的代理模式的应用实例就是对大图浏览的控制。\n- 用户通过浏览器访问网页时先不加载真实的大图，而是通过代理对象的方法来进行处理，在代理对象的方法中，先使用一个线程向客户端浏览器加载一个小图片，然后在后台使用另一个线程来调用大图片的加载方法将大图片加载到客户端。当需要浏览大图片时，再将大图片在新网页中显示。如果用户在浏览大图时加载工作还没有完成，可以再启动一个线程来显示相应的提示信息。通过代理技术结合多线程编程将真实图片的加载放到后台来操作，不影响前台图片的浏览。\n- 远程代理：远程代理可以将网络的细节隐藏起来，使得客户端不必考虑网络的存在。客户完全可以认为被代理的远程业务对象是局域的而不是远程的，而远程代理对象承担了大部分的网络通信工作。\n- 虚拟代理：当一个对象的加载十分耗费资源的时候，虚拟代理的优势就非常明显地体现出来了。虚拟代理模式是一种内存节省技术，那些占用大量内存或处理复杂的对象将推迟到使用它的时候才创建。\n-在应用程序启动的时候，可以用代理对象代替真实对象初始化，节省了内存的占用，并大大加速了系统的启动时间。\n\n动态代理\n\n- 动态代理是一种较为高级的代理模式，它的典型应用就是Spring AOP。\n- 在传统的代理模式中，客户端通过Proxy调用RealSubject类的request()方法，同时还在代理类中封装了其他方法(如preRequest()和postRequest())，可以处理一些其他问题。\n- 如果按照这种方法使用代理模式，那么真实主题角色必须是事先已经存在的，并将其作为代理对象的内部成员属性。如果一个真实主题角色必须对应一个代理主题角色，这将导致系统中的类个数急剧增加，因此需要想办法减少系统中类的个数，此外，如何在事先不知道真实主题角色的情况下使用代理主题角色，这都是动态代理需要解决的问题。\n\n总结\n--------------------\n在代理模式中，要求给某一个对象提供一个代理，并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate，它是一种对象结构型模式。\n- 代理模式包含三个角色：抽象主题角色声明了真实主题和代理主题的共同接口；代理主题角色内部包含对真实主题的引用，从而可以在任何时候操作真实主题对象；真实主题角色定义了代理角色所代表的真实对象，在真实主题角色中实现了真实的业务操作，客户端可以通过代理主题角色间接调用真实主题角色中定义的方法。\n- 代理模式的优点在于能够协调调用者和被调用者，在一定程度上降低了系统的耦合度；其缺点在于由于在客户端和真实主题之间增加了代理对象，因此有些类型的代理模式可能会造成请求的处理速度变慢，并且实现代理模式需要额外的工作，有些代理模式的实现非常复杂。远程代理为一个位于不同的地址空间的对象提供一个本地的代表对象，它使得客户端可以访问在远程机器上的对象，远程机器可能具有更好的计算性能与处理速度，可以快速响应并处理客户端请求。- 如果需要创建一个资源消耗较大的对象，先创建一个消耗相对较小的对象来表示，真实对象只在需要时才会被真正创建，这个小对象称为虚拟代理。虚拟代理通过使用一个小对象来代表一个大对象，可以减少系统资源的消耗，对系统进行优化并提高运行速度。\n- 保护代理可以控制对一个对象的访问，可以给不同的用户提供不同级别的使用权限。\n\n"
  },
  {
    "path": "structural_patterns/structural.rst",
    "content": ".. _structural:\n\n结构型模式\n====================\n\n结构型模式(Structural Pattern)描述如何将类或者对\n象结合在一起形成更大的结构，就像搭积木，可以通过\n简单积木的组合形成复杂的、功能更为强大的结构。\n\n结构型模式可以分为类结构型模式和对象结构型模式：\n\n- 类结构型模式关心类的组合，由多个类可以组合成一个更大的\n系统，在类结构型模式中一般只存在继承关系和实现关系。\n- 对象结构型模式关心类与对象的组合，通过关联关系使得在一\n个类中定义另一个类的实例对象，然后通过该对象调用其方法。\n根据“合成复用原则”，在系统中尽量使用关联关系来替代继\n承关系，因此大部分结构型模式都是对象结构型模式。\n\n**包含模式**\n\n- 适配器模式(Adapter)\n    重要程度：4\n- 桥接模式(Bridge) \n    重要程度：3\n- 组合模式(Composite) \n    重要程度：4\n- 装饰模式(Decorator)\n    重要程度：3\n- 外观模式(Facade)\n    重要程度：5\n- 享元模式(Flyweight) \n    重要程度：1\n- 代理模式(Proxy)\n    重要程度：4\n\n  \n**目录**\n\n.. toctree::\n    :maxdepth: 2\n    :numbered: 2\n    \n    adapter\n    bridge\n    decorator\n    facade\n    flyweight\n    proxy\n"
  }
]