设计模式相关
文章平均质量分 78
jiangtao_killer
这个作者很懒,什么都没留下…
展开
-
来说说(Decorator)装饰者模式
1.装饰者模式为了解决的问题?在面向对象设计原则中,是优先使用组合而非继承,我们要扩展一个基类的时候,我们增加了新功能,要是修改基类的话,那么所有的对象都有这个新功能了,我们在子类中扩展的话,那么势必会造成子类与子类有着大量相似,重复的代码,这样就有违背我们的设计原则了,所以在特别情况下,我就要向大家推荐装饰者模式了,在各种引擎中,大部分很多都用到了装饰者模式,像我们熟悉的cocos2dx,他原创 2017-06-16 17:57:33 · 284 阅读 · 0 评论 -
来说说指令(Command)模式
1.指令模式的意义。模式是为了解决问题而生,他让编程流程化,面相对象话,系统模块话,让人易于读,易于写,易于扩展,易于修改,软件逻辑,尤其复杂点的游戏世界,它的逻辑更是千奇百遍,策划的思路有时候更是天马行空。所以为了解决这些问题,人们约定俗成了一样设计思路,即设计模式。但是也不能一味的套用设计模式,他也同时只是一种思想,跟古代的兵法一样,虚虚实实,伺机而动。而今天所说的指令模式,其实说白了就是原创 2017-06-13 16:49:28 · 1456 阅读 · 0 评论 -
来说说<Adpater>适配器模式
适配器模式,是满足不同的新需求,但是新的需求又和老的需求有某种连续这种情况用适配器模式在何时不过了。using System;using System.Collections;/// /// 适配器设置模式/// interface IStack{ void Push(); void Pop(); void Peek();}/// /// 方法的适配器///原创 2017-06-26 13:33:46 · 293 阅读 · 0 评论 -
来说说<Bridge>桥接模式
1,什么是桥接模式?通常的例子就是,向画笔一样,有12种颜色,分别有大中小三种笔刷,我们要怎么组合才最简单,最优化?最笨的方法需要组合3 * 12 = 36 次才能达到我们的要求,如过我们像毛笔一样,有三种大中小的画笔,但是有12种的颜料,我们只需要组合3 + 12 = 15 次,我们大家都知道所有的颜色都是有红绿蓝组成,那么我们只需要3 +3 = 6 次,我们就可以得到所有的颜色。我们来实现原创 2017-06-26 16:40:34 · 289 阅读 · 0 评论 -
来说说(Composite)组合模式
1、组合模式应用分析 组合模式可以适用以下情形: ◊ 希望把对象表示成部分—整体层次结构; ◊ 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中所有对象。 组合模式具有以下特点: ◊ 定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,不断的递归下去。客户代码中,任何用到基原创 2017-06-27 12:47:27 · 288 阅读 · 0 评论 -
来说说(Facade)外观模式
外观模式的实用性? 1.为一个复杂子系统提供一个简单接口。 2.提高子系统的独立性。 3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。代码实现using System;using UnityEngine;public class AdpaterTestDemo{ public void testBirdgeMain()原创 2017-06-27 14:56:44 · 320 阅读 · 0 评论 -
来说说SubClass沙盒模式
1,子类沙盒模式的意义。此模式其实是一种非常小巧的模式,其实也是一种小技巧,我们来说说游戏中的技能系统的设计吧,它大致分为主动技能,被动技能,增益技能,减益技能,一个技能又可能有多种表现形式,有种不同的等级,那我们怎么办呢?凭借我这么多的经验来说其实在简单不过了,等级不同怎么办,设置成配表,不同技能怎么办,大多数没什么经验的人都会设计成继承关系,然后子类来改写基类的实现方法,从而实现不同的技能原创 2017-06-14 16:06:21 · 356 阅读 · 0 评论 -
来说说(Memorandum)备忘录模式
1.什么是备忘录模式?根据他的名字来分析,我们就知道他是来保存一些状态的,当回滚的时候,就可以来进行返回,撤销等操作,就像我们coding的时候,写错了,要直接control + z来进行返回,当我们又不想破坏对象的原封装性,又要来存储,记录一些状态,怎么办?就像四五年前,我们做的萌三国之类的战旗一样,我们手动控制武将的移动,移动了一会我们反悔了怎么办?这样备忘录模式就能够游刃有余的给我们解决原创 2017-06-15 12:41:38 · 398 阅读 · 0 评论 -
来说说(Proxy) 代理模式
1,生活中的例子。 代理模式提供一个中介以控制对这个对象的访问。一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。而在软件系统中,这种代理模式,依然可以更好的把要访问的对象保护起来,不让客户端直接靠近,客户端可以对实际要访问的系统做在此封装,条件等的判断。2,实际的代码using System;/// /// 代理模式///原创 2017-06-28 10:25:11 · 341 阅读 · 0 评论 -
来说说(Prototype)原型模式
1.原型模式使用的场合?当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适,然原创 2017-06-23 17:24:53 · 350 阅读 · 0 评论 -
来说说<Builder>创建模式
1.什么是创建者模式?在什么时候使用?当我们要创建一个复杂的系统,并且这种系统由着特定的复杂的步骤组合而成,我们要怎么办?就像老板要你去采购一批电脑,电脑的配置各有所不同,品牌也不同,而电脑由不同的部件组成,主板,内存,显示器,机箱等组成,而你不肯能一个一个零件的去采购,然后在来组装,这时候,我们就需要去找电脑城的老板,去找不同品牌的老板,让老板来给你组装好成品的电脑,你只需要付钱就可以拿到不原创 2017-06-23 16:20:35 · 226 阅读 · 0 评论 -
来说说(Strategy)策略模式
1.什么是策略模式?为了解决什么问题?实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或原创 2017-06-17 16:32:32 · 941 阅读 · 0 评论 -
来说说组件(Components)模式
1.什么是组件模式?通俗点讲,我觉得他像一个机械工程一样,像飞机,潜艇,他有许多的零件系统组成,各个零件部门相互独立,独立来加工,等把需要的组件零件都加工生产完成之后,由组装师组成一个完整的个体,而要启动这个整体飞机要起飞,潜艇要发射炮弹,各个系统组件都协调有序的运行起来。而这些组件又想独立于系统,随时可以进行更换,进行升级。2.在游戏中是怎么使用的?现在的游戏中大量的用到了组件模式,他比继承原创 2017-06-09 16:53:42 · 3213 阅读 · 1 评论 -
来说说Unity观察者(Observer)模式
何为观察者模式,大家都比较形象的例子,和报纸的订阅差不多,订阅者就属于观察者,我想要订阅报纸了,然后就像报刊社订阅报纸,然后每天都有邮递员向您这送报纸,不想订阅了,就自己取消,然后第二天就不会有人给你送报纸。我们来利用Delegate实现一个简单的观察着模式.创建一个消息封装体Class,用来传递需要的消息using System;using UnityEngine;namespac原创 2017-06-08 18:02:06 · 585 阅读 · 0 评论 -
来说说(AbstractFactory)静态工厂模式
1。什么时候需要静态工厂模式? (1)一个系统要独立于它的产品的创建、组合和表示时。 (2)一个系统要由多个产品系统中的一个来配置时。 (3)当你要强调一系列相关的产品对象的设计以便进行联合使用时。 (4)当你提供一个产品类库,而只想显示它们的接口不是实现时。2。我们来实现一个静态工厂模式我们来实现一个UI的静态接口using System;原创 2017-06-20 10:36:21 · 242 阅读 · 0 评论 -
委托(Delegate)的详解
1、定义 delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用"。 它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。 delegate是面向对象、类型安全、可靠的受控原创 2017-06-08 15:47:16 · 826 阅读 · 0 评论 -
来说说(Singleton)单例模式
1.单例模式很常见,这多余的就不说了,我们来实现一个多线程下面的单例,在传统的单例模式下面,我们可以完全保证在程序的整个运行周期类只存在一个实例,但是在多线程的情况下,由于内存没有共享等原因,很有肯能造成多个实例,我们通常的解决方案就是给对象加锁,代码如下:using System;public class Singleton{ //定义一个静态变量来保存类的实例 private s原创 2017-06-21 11:37:15 · 173 阅读 · 0 评论 -
来说说(Template Method )模版方法模式
1,无处不在的Template Method 模式需求的变化是软件设计永恒的定理,如何管理变化带来的复杂性呢?,设计模式的艺术性和复杂度就在于如何分析,和发现分析系统中的变化点和稳定点Template Method模式的意图就是定义一种稳定不变的算法结构,然后变化的部分在子类中去实现。就像我们查询数据库一样,我们不管是查询那一张表,他都将是下面的步骤:1.连接数据库(Conne原创 2017-06-30 16:38:57 · 367 阅读 · 0 评论 -
来说说(SimpleFactory)简单工厂模式
1。何为简单工厂模式?就是把创建的过程封装起来,客户只关心需要什么样的产品,不关心整个产品创建的过程。我们来实现一个简单的工厂模式。我们就拿客户点餐为例,客户想要什么食品,他不关心食品是怎么做的,食品的做法直接交给工厂即可。我们来创建一个食品的基类。并且创建2种食品。using System;using UnityEngine;public abstract class Food{原创 2017-06-21 15:45:48 · 346 阅读 · 0 评论 -
来说说(Iterator)迭代器模式
1,动机。 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。2,实用性1.访问一个聚合对象的内容而无需暴露它的内部表示。2.支持对聚合对象的多种遍历。3.为遍历不同的聚合结构提供一个统一原创 2017-06-28 12:19:27 · 353 阅读 · 0 评论