diff --git "a/Assets/Patterns/\346\250\241\345\274\217.md" "b/Assets/Patterns/\346\250\241\345\274\217.md" new file mode 100644 index 0000000..ee1f184 --- /dev/null +++ "b/Assets/Patterns/\346\250\241\345\274\217.md" @@ -0,0 +1,53 @@ +## 1. Command(命令模式) +命令不需要关系它的执行方式,只要它执行就可以。 + +**如何实现?** +* 写个命令的基类,并且加入子类必须实现的执行方法Execute. + +**啥时候用它?** +* 命令便于交换和管理。**非主要作用**如原来的左右手交换,左手执行左移动的命令,右手执行右移动的命令,设置里添加了左右手交换的功能,玩家更改就很方便的交换了。 +* 重播系统。 **游戏重放多数用的都是储存命令的方式,记录玩家的行为** +* 返回上一步的时候(需要在命令基类加入Undo这个撤销方法,和Execute走相反的路线)**如:棋牌悔棋也是这个方式** + +**相关模式** +* [Subclass Sandbox](#11-subclass-sandbox)。你也许最终会有很多子类,这个模式可以更好的管理这些子类。 + + +## 11. Subclass Sandbox (子类沙盒) +需要相似对象但是他们有不同的行为,根据基类提供的方法来组合创建子类的行为。 + +**如何实现?** +* 定义protected 权限的方法防止暴露出来,子类通过调用基类的这个方法来实现特定的行为。减少了很多相同的代码。 + +**啥时候用它?** +* 多个子类有着相同的行为的时候,就可以把这种行为集成到子类中. 【如:游戏中很多英雄角色,行为都不相同,但是也有很多相同的地方,当然这个并不是很好的实现方式,英雄过多就会放大缺点】案例中的超级大国就是子类的一种组装。 +* 很多时候也会把这种方法做成静态,因为快,但是只限于行为,而且行为输入参数少的情况下,否则会造成更复杂的情况。 + +**缺点?** +虽然子类代码解脱了,但是基类代码可能会显得越发的臃肿,所以用到了以下相关的模式,来解脱基类。 + +**Related patterns** + +* [Update Method](#9-update-method). Update 方法通常被实现为是沙盒方法。 + +* [Type Object](#12-type-object). 除了可以在父级中定义所有方法之外,您还可以给子级提供对定义这些方法的对象的引用。 + +* [Template](#23-template). Template 模式与子类沙盒模式相反,Subclass Sandbox是在基类实现,而Template模式中,是在子类中实现。 当然了子类依旧和其他子类的无关。只是多了一些行为抽象。 + +## 23. Template (模板) +您拥有使用相同算法的对象,但是这些对象以不同的方式实现了算法中的某些步骤。 + +**如何实现?** +基类中定义模板函数,调用其中的其他方法函数。 这些方法行为在子类中再实现,这些模板方法一般是提供外围管理类统一调用的。 + +**什么时候用它?** +* 当您的子类共享行为时,父类可以提供这些行为。 如基类提供 了各种零件的抽象,一个组装方法Combine 调用这些需要子类实现的方法。(父类组合,基类实现。) + +**相关模式** +* [Subclass Sandbox](#11-subclass-sandbox). Subclass Sandbox 是父类实现子类调用,这个是父类定义接口供子类实现,并提供组装方法供外调用。 + +# Socials + +* Visit my [Portfolio](https://www.habrador.com) + +* Follow me on [Twitter](https://twitter.com/eriknordeus) \ No newline at end of file diff --git "a/Assets/Patterns/\346\250\241\345\274\217.md.meta" "b/Assets/Patterns/\346\250\241\345\274\217.md.meta" new file mode 100644 index 0000000..ece9d95 --- /dev/null +++ "b/Assets/Patterns/\346\250\241\345\274\217.md.meta" @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6cd6bd0b6ce40ae8ae6233b5bb18638 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 9ac52f1..c3c8675 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -4,9 +4,9 @@ "com.unity.2d.tilemap": "1.0.0", "com.unity.ide.rider": "1.1.4", "com.unity.ide.vscode": "1.2.3", - "com.unity.test-framework": "1.1.19", + "com.unity.test-framework": "1.1.22", "com.unity.textmeshpro": "2.0.1", - "com.unity.timeline": "1.2.6", + "com.unity.timeline": "1.2.18", "com.unity.ugui": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index a19ae12..80467ae 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -13,7 +13,7 @@ "dependencies": {} }, "com.unity.ext.nunit": { - "version": "1.0.5", + "version": "1.0.6", "depth": 1, "source": "registry", "dependencies": {}, @@ -36,11 +36,11 @@ "url": "https://packages.unity.com" }, "com.unity.test-framework": { - "version": "1.1.19", + "version": "1.1.22", "depth": 0, "source": "registry", "dependencies": { - "com.unity.ext.nunit": "1.0.5", + "com.unity.ext.nunit": "1.0.6", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, @@ -56,10 +56,15 @@ "url": "https://packages.unity.com" }, "com.unity.timeline": { - "version": "1.2.6", + "version": "1.2.18", "depth": 0, "source": "registry", - "dependencies": {}, + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, "url": "https://packages.unity.com" }, "com.unity.ugui": { diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 88062e3..6646703 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.4.17f1 -m_EditorVersionWithRevision: 2019.4.17f1 (667c8606c536) +m_EditorVersion: 2019.4.22f1 +m_EditorVersionWithRevision: 2019.4.22f1 (9fdda2fe27ad)