![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
东北砍王
做游戏,是种梦想!
展开
-
其他模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~本文记录一些比较不常用 or 目前不能理解的模式:1.解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示。并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2.访问者模式(Vistor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。...原创 2021-03-17 20:39:14 · 244 阅读 · 0 评论 -
享元模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~1.享元模式(FlyWeight):运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量非常相似的类的开销。如果某些大量生产的实例除了几个参数外基本上是相同的,就可以使用。把那些参数移到类的外面,在方法调用时将他们传递进来,可以大幅度减少单个实例的数目。case 1:不同的用户玩游戏机每一个用户都需要一个游戏机玩游戏机本身是一个对象,但是游戏机本身是很类似的所以把用户提取出来当参数,游戏机采用共享对象的模式原创 2021-03-17 20:38:42 · 61 阅读 · 0 评论 -
中介者模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的互相调用,从而使其耦合松散,而且可以独立地改变它们之间的交互。举个例子:1.国与国之间不必互相联系,而通过联合国充当中介者联系。2.新入职的人不必直接与各部分的人打交道,而通过HR或者主管充当中介者联系。代码如下:1.创建 中介者类 和 国家类abstract class Mediator{ public abst原创 2021-03-17 20:38:08 · 52 阅读 · 0 评论 -
职责链模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。case 1:请假系统请假一般都会先和上级leader审批,审批过了再部门经理审批,再老板审批。这样的程序怎么设计呢?使用一个Manager设计:class Manager{ public void GetRes原创 2021-03-17 20:37:30 · 44 阅读 · 0 评论 -
敏捷开发原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要XX模式,一般不要着急实现,而在需要时再进行重构。...原创 2021-03-17 20:36:59 · 56 阅读 · 0 评论 -
命令模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。case 1:烤羊肉串public class Barbecuer//烤肉串者{ public void BakeMutton() { Console.WriteLine("烤羊肉串"); } public void BakeChicke原创 2021-03-17 20:35:42 · 53 阅读 · 1 评论 -
桥接模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~case 1:两个手机品牌,都有游戏和通讯录功能。如果使用继承模式:1.定义一个手机品牌类。2.有两个手机品牌,M和N。class HandsetBrand{ public virtual void Run() { }}class HandsetBrandM : HandsetBrand{}class HandsetBrandN : HandsetBrand{}每个手机都有游原创 2021-03-17 20:35:14 · 69 阅读 · 0 评论 -
合成/聚合复用原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~合成/聚合复用原则(CARP):尽量使用合成/聚合,尽量不要使用类继承。问题:1.什么是合成?强的拥有关系,严格的部分和整体的关系,部分和整体的生命周期是一样的。2.什么是聚合?弱的拥有关系,一个A对象包含另一个B对象,但是B对象不是A对象的一部分。好处:保持每个类被封转。每个类集中在单个任务上。类和继承会保持较小的规模,并且不太可能增长为不可控制的庞然大物。...原创 2021-03-17 20:34:37 · 105 阅读 · 0 评论 -
单例模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。为了防止实例化多个对象。让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实力的方法。代码如下:class Singleton{ private static Singleton instance; private Singleton() { } p原创 2021-03-17 20:34:01 · 48 阅读 · 0 评论 -
迭代器模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~迭代器模式(Itdeator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。什么时候使用?1.当需要访问一个聚集对象,不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。2.对聚集有多种方式遍历时,可以考虑用迭代器模式。例子:foreach in,不需要知道集合对象是什么,都可以遍历对象。如何实现迭代器呢?定义两个接口:1.Iterator 迭代抽象类。2.Aggregate 聚原创 2021-03-16 20:10:16 · 49 阅读 · 0 评论 -
组合模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~**组合模式(Composite):**将对象组合成树形结构以表示 部分-整体 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。常见使用场景:1.在我写UI框架的时候,UI分为Panel和Item。Panel为大的UI面板,Item为面板内的小UI组件。Panel里面会创建Item,而Item里面又创建Item,形成组合关系。2.Unity的控件。所有的控件的基类都是Component,而基类中就有Ad原创 2021-03-16 20:09:43 · 52 阅读 · 1 评论 -
备忘录模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~在游戏内打BOSS之前都会存档,如果打完之后效果不理想,可以回到初始状态。怎么实现呢?先定义一个游戏角色类:class GameRole{ public int Vitaluty { get; set; } public int Attack { get; set; } public int Defense { get; set; } public void ShowState() {原创 2021-03-16 20:09:12 · 56 阅读 · 0 评论 -
适配器模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~举个例子:假如你不懂外语去了国外需要和别人交流,那么你就需要一个翻译官。这个翻译官就冲当你的适配器,也就是用到了适配器模式。适配器模式(Adapter):将一个类的接口转换成客户端希望的另外一个接口。使得由于接口不兼容而不能一起工作的那些类一起工作。case 1:电源适配器我们国家是220V电压,而有的国家110V电压。有些东西是不能用的,那怎么办呢?出现了电源适配器,把电源变成需要的电压,就可以使用了。也就是说,原创 2021-03-16 20:08:34 · 65 阅读 · 0 评论 -
状态模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~很多时候的需求都是,根据某个状态的不同,进行不同的操作。case 1:怪物AIint hp = 100;if (hp > 80 && hp < 100){ Console.WriteLine("往死里干");}else if (hp > 50 && hp < 80){ Console.WriteLine("边跑边干");}else if (hp原创 2021-03-16 20:07:56 · 50 阅读 · 0 评论 -
抽象工厂模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是抽象工厂模式?抽象工厂模式是工厂方法模式的升级版。工厂方法只能创建一个产品,抽象工厂可以创建一系列的产品。抽象工厂模式(Abstract Facotry):提供一个创建一系列相关或相互依赖的接口,无需指定它们具体的类。Facotry 是抽象工厂接口,里面应该包含所有产品的创建抽象方法。在运行时刻创建一个 FactoryA 类的实例,这个具体工厂再创建特定产品。case 1:不同的数据库进行存储不同的数据现在需要存原创 2021-03-16 20:07:29 · 56 阅读 · 0 评论 -
观察者模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是观察者模式?观察者模式又叫发布-订阅模式(Publish-Subscribe)。定义了一种一对多依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。首先定义:1.抽象通知者接口2.抽象的观察者接口interface ISubject{ void Attach(Observer observer); void Detach(O原创 2021-03-16 20:06:47 · 54 阅读 · 0 评论 -
建造者模式
#####本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~举个例子:用程序画一个小人应该怎么做?Pen p = new Pen();Graphics g = new Graphics();g.DrawEllipse(p, 50, 20, 30, 30);//头g.DrawRectangle(p, 60, 50, 10, 50);//身体g.DrawLine(p, 60, 50, 40, 100);//左手g.DrawLine(p, 60, 50, 90, 100);原创 2021-03-16 20:06:19 · 44 阅读 · 0 评论 -
外观模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是外观模式?为一组接口(子系统)提供了一个高层接口,使子系统更方便用。假设有四个子系统:class SubSystemA{ public void DoA() { }}class SubSystemB{ public void DoB() { }}class SubSystemC{ public void DoC() { }}class原创 2021-03-16 20:05:57 · 49 阅读 · 0 评论 -
迪米特法则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~迪米特法则(LoD),也叫最小知识原则:如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。尽量降低成员的访问权限强调类之间的松耦合优点:类之间的耦合越弱,越利于复用。一个处于弱耦合的类被修改,不会对有关系的类造成波及。...原创 2021-03-16 20:05:10 · 51 阅读 · 0 评论 -
模板方法模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~在上学的时候,都参加过考试。假如需要我们自己抄题目,那应该如何用程序写出来呢?class TestPaperA //学生A抄的试卷{ public void TestQ1() { Console.WriteLine("这是题目1,非常难的啊"); Console.WriteLine("选A"); } public void TestQ2() {原创 2021-03-02 20:47:40 · 44 阅读 · 0 评论 -
原型模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~假如需要创建 100 个 Person对象,可能直接复制粘贴很简单就完成了。Person person1 = new Person() { name = "小王", sex = "男", age = 25 };Person person2 = new Person() { name = "小刘", sex = "男", age = 25 };Person person3 = new Person() { name = "小李",原创 2021-03-02 20:46:35 · 54 阅读 · 0 评论 -
工厂方法模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~简单工厂模式在此:传送门简单工厂模式的问题:工厂类包含了必要的判断逻辑,根据客户端的选择条件动态实例化相关的类。如果需要新增功能,就必须添加 case 的分支条件。这样对修改开放了,违背的开闭原则。那就需要,工厂方法模式(Factory Method):定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。原来的简单工厂写法:Operation oper = OperationFac原创 2021-03-02 20:45:50 · 62 阅读 · 0 评论 -
代理模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。其实就是两者都实现相同的接口,通过代理进行调用。说白了就是访问对象的时候引入一层包装。通过这层包装,附加多种用途。使用方法:ISubject:代表实体接口,定义共同方法。RealSubject:代理的真实实体Proxy:代理类,保存一个代理可以访问的实体,并且提供一个和ISubject相同的接口,这样代理就可以代替实体。public interfa原创 2021-03-02 20:44:56 · 47 阅读 · 0 评论 -
装饰模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~装饰模式(Decorator):动态地给一个对象添加一些额外的职责。增加功能比生成子类更为灵活。case1:给人搭配不同的服饰系统使用之前学的继承实现,确保符合开闭原则。public class Person{ public string name;}//服饰类public abstract class Finery{ public abstract void WearClother();}p原创 2021-03-02 20:44:32 · 64 阅读 · 0 评论 -
依赖倒置原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~依赖倒置原则:高层模块不应该依赖低层模块。两个都应该依赖抽象。抽象不应该依赖细节。细节应该依赖抽象。说白了就是:针对接口编程。case:比如在 Unity 中,为了使常用代码可以复用,会把许多函数写成程序集,每次做新项目的时候直接调用这些函数就可以。(也是高层模块依赖低层模块)资源加载,当前项目是使用 Resoucers 方式加载的:class ResourceManager{ public Objec原创 2021-03-02 20:43:30 · 91 阅读 · 0 评论 -
里氏替换原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~里氏替换原则(LSP):子类型必须能够替换掉它们的父类型。一个地方如果使用的是父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。在软件里面,把所有的父类替换成它的子类,程序的行为没有变化。说白了就是:子类型能替换父类型。也正是因为子类型的可替换性,才使得使用父类类型的模块在无需修改的情况下就可以扩展。Animal animal = new Dog();//new Cat() ... 等等animal原创 2021-03-02 20:42:50 · 46 阅读 · 0 评论 -
开放封闭原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~开放-封闭原则(OCP),也叫开-闭原则。软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。对扩展是开放的。对更改是封闭的。在做任何系统的时候,需求都会改变的,既然需求一定变化,就需要考虑的是如何在面对变化时,设计的软件可以相对容易修改。软件维护的最好办法就是:多扩展,少修改。说白了,就是在设计初期,就把这个类设计的足够好,并且不再去修改了。如果新需求来,增加一些类就完事了,原来的代码就尽量不动。但是,往往原创 2021-03-02 20:42:10 · 55 阅读 · 0 评论 -
单一职责原则
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。在编程的时候,很自然地就会给一个类加各种各样的功能。如果一个类承担的责任过多,就等于把这些指责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。case:比如说做游戏的时候,尽量要把 界面 和 逻辑 分离开。所谓游戏逻辑,不过就是数据变化的问题。而界面显示,就是根据数原创 2021-03-02 20:41:29 · 46 阅读 · 0 评论 -
简单工厂模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是简单工厂模式:就是一种实例化对象的方式。下面使用一个计算器范例,来说明什么是简单工厂模式:如果面试让你实现一个计算器,有的人可能会这么写。class BadCalc { float numberA; float numberB; float result; EOperation operation = EOperation.Add;原创 2021-03-02 20:41:08 · 127 阅读 · 0 评论 -
观察者模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是观察者模式?观察者模式又叫发布-订阅模式(Publish-Subscribe)。定义了一种一对多依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。首先定义:1.抽象通知者接口2.抽象的观察者接口interface ISubject{ void Attach(Observer observer); void Detach(O原创 2021-03-01 13:19:33 · 58 阅读 · 0 评论 -
策略模式
本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~什么是策略模式?定义了算法家族,分别封装起来,让它们之间可以互相替换,减少了各种算法类与使用算法类之间的耦合。此模式让算法的变化,不会影响到使用算法的客户。下面使用一个商场收银系统的范例来说明。需求:可以对原价灵活的进行折扣计算,比如:8折、7折、满300减100、满200减50等等。在学习了上一章简单工厂模式之后,我们能写出如下代码:现金收费抽象类:里面存在一个抽象方法代表收取现金,参数为原价,返回为当前价格。原创 2021-03-01 13:18:26 · 79 阅读 · 0 评论