<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[于益偲]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Froser</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Froser]]></copyright><item><title><![CDATA[一、Swift 语法概述]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/38111303</link><guid>https://blog.youkuaiyun.com/Froser/article/details/38111303</guid><author>Froser</author><pubDate>Fri, 25 Jul 2014 15:08:31 +0800</pubDate><description><![CDATA[Swift是Apple最新推出的语言，用于编写iOS和OS X程序，与C语言和Objective-C兼容。本系列的文章中的一些例子，都来自于苹果官方的GUIDE: The Swift Programming Language，有兴趣的同学可以去苹果的官网下载英文原版的iBook。

一、Hello world
  Swift中不需要main函数，也不需要用;分开每一行的语句，一个简单的Hel]]></description><category></category></item><item><title><![CDATA[二、C++迭代器的两种实现方式 （Range for和C#、Java中的foreach）]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/35274963</link><guid>https://blog.youkuaiyun.com/Froser/article/details/35274963</guid><author>Froser</author><pubDate>Fri, 27 Jun 2014 17:36:37 +0800</pubDate><description><![CDATA[一、迭代器概述
  这个标题其实有点“标题党”的含义，因为C++在标准库中的实现迭代器的方式只有一种，也就是为类定义begin()和end()函数，C++11增加了range for语句，可以用来遍历迭代器中的元素。实现迭代器的第二种方式，就是用C++模拟C#和Java中的迭代器模式，并且我们可以定义出自己的foreach语句。除此之外，迭代器可能还有很多种实现的方法，各个库也会多自己的迭代器的]]></description><category></category></item><item><title><![CDATA[一、从Java、C#到C++ （为什么C++比较难）]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/34859055</link><guid>https://blog.youkuaiyun.com/Froser/article/details/34859055</guid><author>Froser</author><pubDate>Thu, 26 Jun 2014 21:41:17 +0800</pubDate><description><![CDATA[由于C++已经遗忘得差不多了，我翻起了最新初版的C++ Primer，打算深入了解一下C++这一门语言。C++ Primer第五版可谓是“重构”过的，融合了C++11的标准，并将它们全部在书中列举了出来。
  在学习的过程中，我会把C++与Java、C#等纯面向对象的语言进行对比，中间的一些感悟，仅仅代表个人的意见，其中有对有错，也可能会存在一些争议。
  差不多翻完了整本Primer C++]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[欢迎界面]分析模板方法(Template Method)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/24200151</link><guid>https://blog.youkuaiyun.com/Froser/article/details/24200151</guid><author>Froser</author><pubDate>Sun, 20 Apr 2014 22:18:11 +0800</pubDate><description><![CDATA[模板方法是在抽象类中最常用的模式了（应该没有之一），它定义一个操作中算法的骨架，而将一些步骤延迟到子类中，使得子类可以不改变一个算法的结构即可重新定义算法的某些步骤。
  例如我们要编写一个欢迎界面，如果用户是第一次打开本软件，则弹出一个欢迎的提示。为了能够实现复用，将这个机制当成一个基类，Java代码如下：

abstract class FirstLogin{
    abstract ]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[游戏中的兵种状态转换]分析状态(State)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/24065401</link><guid>https://blog.youkuaiyun.com/Froser/article/details/24065401</guid><author>Froser</author><pubDate>Sat, 19 Apr 2014 00:28:23 +0800</pubDate><description><![CDATA[假设我们正在做一个即时战略游戏，我们设计一个兵种，他在刚刚生产出来的时候是步兵，但是他可以切换武器，第一次切换会变成弓箭手，第二次切换会变成举着盾牌的装甲兵，第三次切换则又变成了步兵……如何实现这个切换的机制？我们一开始会想到，在步兵这个类中加入switch语句，然而这样的话，代码不利于扩展，不利于修改，这时我们就可以使用状态模式了。
  状态模式允许一个对象在其内部状态改变时改变它的行为。对象]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[剪刀石头布AI策略]分析策略(Strategy)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/24020949</link><guid>https://blog.youkuaiyun.com/Froser/article/details/24020949</guid><author>Froser</author><pubDate>Fri, 18 Apr 2014 15:30:03 +0800</pubDate><description><![CDATA[策略模式是一个非常简单的模式。它定义一系列的算法，把它们一个个封装起来，并且使它们可以相互替换。
  考虑到我在做一个剪刀石头布的游戏，可以和计算机对战。计算机的难度等级分为2个等级：普通难度和无法战胜难度。普通难度是指电脑会随机出石头、剪刀、布，而无法战胜难度是指电脑会“作弊”，电脑会事先知道玩家出的是什么手势。如果玩家出的是剪刀，那么电脑会出石头，玩家永远的无法取胜。
  那么，这两个难度]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[星际争霸的兵种升级]分析观察者(Observer)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/24013467</link><guid>https://blog.youkuaiyun.com/Froser/article/details/24013467</guid><author>Froser</author><pubDate>Fri, 18 Apr 2014 14:16:41 +0800</pubDate><description><![CDATA[观察者模式定义对象的一种一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都会得到通知并被自动更新。
  一个简单的例子是，在星际争霸的虫族中有一个初级单位叫做跳狗(Zergling)，玩家可以在研究中心为它升级“肾上腺素”，升级之后，跳狗的攻击速度会翻倍。在这个模型中，我们可以看出，所有的跳狗都依赖于研究中心，当研究中心研究出肾上腺素后，通知每一个跳狗单位，它们被迫进行自我更新—]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23958699</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23958699</guid><author>Froser</author><pubDate>Thu, 17 Apr 2014 21:00:35 +0800</pubDate><description><![CDATA[在大部分游戏中，都有一个“存档点”的概念。例如，在挑战boss前，游戏会在某个地方存档，如果玩家挑战boss失败，则会从这个存档点开始重新游戏。因此，我们可以将这个“存档点”当成是一个备忘录，我们将此时玩家所有的状态保存下来，以便之后的读取。
  备忘录模式正是如此，它在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的保存状态了。]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[游戏中开启宝箱]分析中介者(Mediator)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23865945</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23865945</guid><author>Froser</author><pubDate>Wed, 16 Apr 2014 21:55:49 +0800</pubDate><description><![CDATA[假设我们正在设计一个游戏房间，房间里有两个按钮和一个宝箱，如果我们按下了按钮1，则按钮2和宝箱均不可使用；如果我们按下了按钮2，则按钮1和宝箱均不可使用；如果我们打开宝箱，则按钮1不可按下。
  在上面的例子中，我们可以看到两个按钮和一个宝箱之间存在着依赖关系，它们之间的状态是有关联的。假设按钮类叫做Button，宝箱类叫做Chest，我们需要避免Button、Chest之间相互连接，我们应当建]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[魔兽争霸、星际争霸、DOTA编队]分析迭代器(Iterator)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23783661</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23783661</guid><author>Froser</author><pubDate>Tue, 15 Apr 2014 20:40:11 +0800</pubDate><description><![CDATA[在即时战略游戏、DOTA中，我们可以多选我们部队，让他们组成一个队伍。在星际1、魔兽3中，一支队伍的最大单位数量为12个，当我们选中一支队伍后，可以命令他们集体朝着哪个方向移动或者进攻，而不用一个一个控制我们的单位。在程序中，我们是如何实现向这支队伍“群发”命令的呢？最开始想到的就是循环——把队伍中的每一个单位加入一个列表中，写一个for循环，依次访问这个列表中的每一个成员，让它们接收命令。]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[计算器]分析解释器(Interpreter)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23773559</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23773559</guid><author>Froser</author><pubDate>Tue, 15 Apr 2014 18:10:03 +0800</pubDate><description><![CDATA[解释器模式是一种广泛运用于编译器的设计模式。它的意图是给定一个语言，定义它的文法的一种表示，并定义一个解释器来解释语言中的句子。
  本篇的内容和“游戏”无关，是从编译原理的角度来对这个模式进行解释，因为它几乎只出现在编译器中。
  下面简单介绍一下编译原理中的文法定义。文法定义可以理解为用类似正则表达式来定义一个文法，它由终结符、非终结符组成。简单来说，终结符是指的具体的符号，非终结符是指的]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[打飞机游戏中的控制器]分析命令(Command)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23714891</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23714891</guid><author>Froser</author><pubDate>Tue, 15 Apr 2014 00:06:39 +0800</pubDate><description><![CDATA[首先请允许我啰嗦几句。为什么我们在软件设计过程中强调设计模式？为软件增加设计模式确实会增加一定的代码复杂程度，但是它的好处是无穷的。它可以使得软件更加易于扩展而无需改变源代码。“解耦”是设计模式中的一个关键词。例如，对于某个对象obj，在调用obj.method()时，我们希望obj是一个基类或者是一个接口，而不是一个具体的实现类，用这种方式来实现解耦。
  下面进入正题。
  假设我正在做一]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[使命召唤等游戏的任务提示]分析职责链(Chain Of Responsibility)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23665947</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23665947</guid><author>Froser</author><pubDate>Mon, 14 Apr 2014 11:59:14 +0800</pubDate><description><![CDATA[我们在使命召唤、暗黑破坏神等游戏时，总会接到各种各样的游戏任务，如到某某地方解救某人，或者消灭某某地方的敌人等。当玩家进入到某一个地图（以下称之为游戏场景）时，我们就可以查看它的任务提示。在这个机制下，我们认为，所有的游戏场景都继承于一个类（如HelpHandler），这个类包含一个显示任务提示的方法（如showHelp）。问题在于，任务的提示是有“上下文联系的”，任务的提示是和你的“场景是如何移]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[游戏场景读取]分析代理(Proxy)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23611465</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23611465</guid><author>Froser</author><pubDate>Sun, 13 Apr 2014 18:39:17 +0800</pubDate><description><![CDATA[在大型游戏中（如刺客信条、使命召唤等），我们需要读取的地图往往是很大的。如果我们在进入游戏时，把所有的地图信息都读出来，会花费很多的时间。那么，为了提高效率，我们采取的措施是，我们并不需要真正把这些元素读取出来，可以先用一些“不怎么需要时间开销的替代品”（也就是我们谈到的代理）来代替这些需要花一定时间读取的实例，等到我们真正需要这些实例的时候，再将这些“替代品”换成实例即可。例如，在一个射击游戏中]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[Dota地图]分析享元(Flyweight)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23508197</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23508197</guid><author>Froser</author><pubDate>Sat, 12 Apr 2014 08:16:12 +0800</pubDate><description><![CDATA[在Dota游戏的地图中有几百棵树，现在假设这些树木无非是这两种：白杨、枫树，数量一共为400棵，那么，在装载这个地图场景的时候，我们是不是应该给这400课树一一建立对象呢？（如：MapItem tree1 = new MapItem("白杨");MapItem tree2 = new MapItem("枫树");MapItem tree3 = new MapItem("白杨");……）哪怕这些语句]]></description><category></category></item><item><title><![CDATA[Java设计模式之从"我想请个秘书！"分析外观(Facade)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23301299</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23301299</guid><author>Froser</author><pubDate>Wed, 09 Apr 2014 22:15:58 +0800</pubDate><description><![CDATA[在银行办业务的时候，经常会碰到如下情况：先填写一张表A，再填写一张表B，然后根据表A和表B的内容填写表C……各种各样的流程绕得人头昏眼花，最后我实在受不了了，问银行：你们这里有没有一条龙服务？！我好想请个秘书！把这些乱七八糟的工作丢给他做啊！

　　上述的例子和外观模式有些像。例如，我们有很多子系统，它们之前的调用十分复杂，为了降低它的复杂程度，我们引入一个外观对象(Facade，就像上面例子]]></description><category></category></item><item><title><![CDATA[Java设计模式之再从[暗黑破坏神"装备镶嵌宝石系统"]分析装饰(Decorator)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23210377</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23210377</guid><author>Froser</author><pubDate>Tue, 08 Apr 2014 22:05:24 +0800</pubDate><description><![CDATA[在暗黑破坏神等RPG游戏中，会遇到如下的一些场景：我有一把很普通的武器，我通过给它“注入魔法力量”、“镶嵌宝石”，来使得它拥有一些攻击特效：例如，一把普通长剑，镶嵌红宝石后，可以附带火焰伤害，镶嵌了一个蓝宝石后，可以使得长剑攻击带有冰冻伤害。
　　如何实现上述的机制呢？首先我们想到的是继承，因为，一个镶嵌了红宝石、蓝宝石的长剑，一定是一个镶嵌了宝石的长剑，并且一定一把长剑。如此下来，程序的结构会]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[魔兽世界包裹系统]分析组合(Composite)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23206041</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23206041</guid><author>Froser</author><pubDate>Tue, 08 Apr 2014 21:18:51 +0800</pubDate><description><![CDATA[RPG游戏中的包裹（或者称为背包）是玩家携带物品的地方，它的大小决定着玩家能够携带物品数量。如在魔兽世界中，玩家起初的物品栏（将物品栏视为玩家的唯一一个包裹）的格子很少，但是玩家可以将新的包裹放在物品栏中，达到扩充物品栏的效果。也就是说，物品栏可以放消耗品、武器等零散的物品，当然也可以放包裹。
　　假定魔兽世界有如下设定：玩家一开始拥有一个默认的包裹（物品栏），玩家可以获得新的包裹放在物品栏上。]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[暗黑破坏神"装备镶嵌宝石系统"]分析桥接(Bridge)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23105323</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23105323</guid><author>Froser</author><pubDate>Mon, 07 Apr 2014 15:09:27 +0800</pubDate><description><![CDATA[暴雪公司著名的游戏暗黑破坏神中，有一个经典的"镶嵌系统"，例如，可以为武器镶嵌红宝石、蓝宝石来得到攻击特效或攻击力加成，为防具镶嵌红宝石、蓝宝石来得到攻击特效或者防御力的加成。不同的宝石加在不同的装备上会有不同效果，如宝石加在武器上则提升武器攻击力，加在防具上则提升防御力。
　　假设我们建立了一个剑类(Sword)和一个盾类(Shield)，建立了一个红宝石类(Ruby)和一个蓝宝石类(Sapp]]></description><category></category></item><item><title><![CDATA[Java设计模式之从[鼠标接口][星际争霸中的兵种行为]分析适配器(Adapter)模式]]></title><link>https://blog.youkuaiyun.com/Froser/article/details/23056285</link><guid>https://blog.youkuaiyun.com/Froser/article/details/23056285</guid><author>Froser</author><pubDate>Mon, 07 Apr 2014 00:11:46 +0800</pubDate><description><![CDATA[适配器将一个类的接口转换成客户希望的另外一个接口。下面用三个例子来反映适配器的不同用途：
　　情况一：
　　我买了一个PS2接口的鼠标，但是我的电脑没有PS2的接口，仅有USB的接口。为了不浪费这个鼠标，我跑到商店买了一个PS2到USB的转接头，这样我就用上了PS2的鼠标。USB转接头就是一个典型的适配器。
interface USBPort {
    void connect();
}]]></description><category></category></item></channel></rss>