设计模式
文章平均质量分 65
丿寒风
网易游戏3年,游戏创业4年,3D设计软件架构师4年...
展开
-
框架设计-数显分离
概述无论是前端业务,还是各种游戏系统和玩法,随着时间的推移,都会变得越来越复杂,越来越庞大,越来越繁琐,解决复杂业务的一个解决方案就是数据驱动(Data Driven)。数据驱动的核心思想是——数显分离,以数据为中心,业务只是数据的各种不同呈现形式。无论逻辑多么繁杂,纯粹的数据都只有一份,而且非常简单。下面看看如何逐步的实现,数显分离…示例为了方便说明,假设有一个显示对象 Display,它有一个坐标属性 x,y,如下:class Display { let x; let y;}原创 2021-03-29 08:56:30 · 628 阅读 · 0 评论 -
23种设计模式C++实例之桥接模式
桥接模式是为了解决类与类之间多对多的关系,使类与类直接的组合更加灵活。#include using namespace std;/* * 桥接模式 * 解决类与类之间多对多的关系 * */class Engine { public: virtual ~Engine() {} virtual void install() = 0;};class Engi原创 2015-12-16 11:03:08 · 1238 阅读 · 0 评论 -
23种设计模式C++实例之策略模式
#include <iostream>using namespace std;/* * 策略模式 * 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。 * 策略模式让算法独立于使用它的客户而独立变化。 * */class Strategy { public: virtual ~Strategy() {} virtual原创 2016-08-10 23:45:12 · 1433 阅读 · 0 评论 -
23种设计模式C++实例之责任链模式
#include <iostream>using namespace std;/* * 责任链模式 * 很多对象由每一个对象对其下家的引用而连接起来形成一条链。 * 请求在这个链上传递,直到链上的某一个对象决定处理此请求。 * 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求, * 这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 * *//* * 造完车之后原创 2016-08-10 23:46:44 · 801 阅读 · 0 评论 -
23种设计模式C++实例之命令模式
#include <iostream>#include <list>using namespace std;/* * 命令模式 * 一个对象调用另一个对象的一般过程: * 1 创建目标对象的实例 * 2 设置调用参数 * 3 调用目标对象的方法 * 但在有时候我们需要对这种调用过程用类Command加以封装 * 降低两个对象之间的耦合度 * */class Doctor{原创 2016-08-10 23:48:10 · 901 阅读 · 0 评论 -
23种设计模式C++实例之访问者模式
#include <iostream>#include <list>using namespace std;/* * 访问者模式 * 把数据结构和对数据结构的操作解耦合 * */class ParkElement;class Visitor { public: virtual ~Visitor() {} virtual void visit(Park原创 2016-08-10 23:49:45 · 1078 阅读 · 0 评论 -
23种设计模式C++实例之中介者模式
#include <iostream>using namespace std;/* * 中介者模式 * 定义一个中介对象来封装系列对象之间的交互 * */class Mediator;class Person { public: Person(string name, int sex, int condition, Mediator* mediator) {原创 2016-08-10 23:51:14 · 1067 阅读 · 0 评论 -
23种设计模式C++实例之备忘录模式
#include <iostream>using namespace std;/* * 备忘录模式 * 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态 * */class Memento { public: Memento(string name, int age) { this->name = name;原创 2016-08-10 23:52:52 · 791 阅读 · 0 评论 -
23种设计模式C++实例之迭代器模式
#include <iostream>using namespace std;/* * 迭代器模式 * */typedef int Object;#define SIZE 5class Iterator { public: virtual ~Iterator() {} virtual void first() = 0; virtual v原创 2016-08-10 23:54:23 · 889 阅读 · 0 评论 -
23种设计模式C++实例之解释器模式
#include <iostream>using namespace std;/* * 解释器模式 * */class Context { public: Context(int num) { this->num = num; } void setNum(int num) { this->n原创 2016-08-10 23:55:55 · 984 阅读 · 0 评论 -
23种设计模式C++实例之概述和设计原则
一 分类1 创建型工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)创建者模式(Builder)原型模式(Prototype)单例模式(Singleton)2 结构型外观模式(Facade)适配器模式(Adapter)代理模式(Proxy)装饰模式(Decorator)桥接模式(Bridge)组合模式原创 2015-12-11 19:19:05 · 3464 阅读 · 1 评论 -
游戏开发中常用的的设计模式
单例模式游戏客户端就是一个单例。 各类单例器,如UI管理器,事件管理器等。下面是Python实现的一个单例。class Singleton(object): @classmethod def Instance(cls): if not getattr(cls, "_instance", None): cls.__instance_num__原创 2017-01-17 18:07:05 · 1775 阅读 · 0 评论 -
23种设计模式C++实例之状态模式
#include <iostream>using namespace std;/* * 状态模式 * */class Worker;class State;class StateOne;class StateTwo;class Worker { public: Worker(); ~Worker(); void dothing();原创 2016-08-10 23:43:44 · 1733 阅读 · 0 评论 -
23种设计模式C++实例之观察者模式
#include <iostream>#include <list>using namespace std;/* * 观察者模式 * 一对多的关系 * */class Secretary;class PlayerObserver { public: PlayerObserver(Secretary* secretary) { this->se原创 2016-08-10 23:38:45 · 1150 阅读 · 0 评论 -
23种设计模式C++实例之工厂方法模式
工厂模式有三种:简单工厂模式,工厂方法模式,抽象工厂模式,其中简单工厂模式属于23种设计模式,实例如下:#include using namespace std;/* * 不符合开闭原则,不是23种标准的设计模式 * */class Fruit { public: virtual ~Fruit() {} virtual void sayName() = 0;};原创 2015-12-11 19:23:40 · 1869 阅读 · 0 评论 -
23种设计模式C++实例之创建者模式
把建造不同类型房子的过程与客户端调用分类#include using namespace std;/* * 建造者模式 * 对象的创建和对象的表示分离 * */class House { public: void setFloor(string floor) { m_floor = floor; } void setWall(string wall原创 2015-12-11 19:32:13 · 1267 阅读 · 0 评论 -
23种设计模式C++实例之原型模式
原型模式就是让对象拥有自我拷贝的功能,方便备份对象数据或者创建对象时设置过多的参数。#include using namespace std;/* * 原型模式:让对象拥有自我复制的功能 * 注意深拷贝和浅拷贝 * */class Programmer{ public: virtual ~Programmer() {} virtual Programmer*原创 2015-12-11 19:34:37 · 3584 阅读 · 0 评论 -
23种设计模式C++实例之单例模式
单例模式就是让一个类智能创建一个对象。单例模式分为两种:懒汉式和饿汉式。// 懒汉式class Singleton { private: Singleton() { cout << "Singleton()" << endl; } public: ~Singleton() { cout << "~Singleton()" << endl; }原创 2015-12-11 19:44:46 · 1276 阅读 · 0 评论 -
23种设计模式C++实例之装饰模式
装饰模式就是在不改变原有的类的情况下,给它添加功能。#include using namespace std;/* * 装饰模式:在不改变原类和使用继承的情况下,对类进行功能的增强 * 对类a功能的增强 * */class Car { public: virtual ~Car() {} virtual void go() = 0;};class Run原创 2015-12-16 10:58:40 · 1129 阅读 · 0 评论 -
23种设计模式C++实例之组合模式
为不同继承层次和组合层次的类,提供统一的接口。#include #include /* * 组合模式 * 让单个对象和组合对象具有一致的接口 * */using namespace std;class IFile { public: virtual ~IFile() {} virtual void display() = 0; virtual int原创 2015-12-16 11:12:29 · 1499 阅读 · 0 评论 -
23种设计模式C++实例之外观模式
为各个不同的类提供统一的接口,然后通过外观模式将其组合起来,对外提供一个统一的接口。#include using namespace std;/* * 外观模式:将子系统中的一组接口提供一个一致的界面 * 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 * */class SubsysA { public: void dothing() {原创 2015-12-16 10:25:19 · 1102 阅读 · 0 评论 -
23种设计模式C++实例之代理模式
代理的目的是一般是为了防止直接访问某一个类,提供一种类似授权的机制。最典型的类中set和get方法实际上就是一种代理。#include using namespace std;/* * 代理模式:为其他对象提供一种代理,并以控制对这个对象的访问 * a类中b类,a类和b类中都实现协议类protocol * */class Shop{ public: virt原创 2015-12-16 10:54:08 · 1143 阅读 · 0 评论 -
23种设计模式C++实例之享元模式
为了避免产生过多的临时对象,创建一个对象,需要需要不同对象的时候设置不同的参数。#include #include using namespace std;/* * 享元模式 * 享元:共享元素 * 以共享的方式来避免大量拥有相同内容对象的开销 * 理解: * 对于经常使用且仅参数不同的对象,不是每次都重新创建一个不同的对象, * 而是创建一个对象之后,每次使用时原创 2015-12-16 11:16:23 · 1127 阅读 · 0 评论 -
23种设计模式C++实例之适配器模式
适配器模式目的为了向客户提供他们所需要的接口,在适配器内部再调用我们自己已经实现的接口。#include using namespace std;/* * 电压适配器 * 将220v适配到18v * */class Cur18v { public: virtual void useCur18v() = 0;};class Cur220原创 2015-12-16 10:48:32 · 1129 阅读 · 0 评论 -
23种设计模式C++实例之模板方法模式
#include <iostream>using namespace std;/* * 模版方法模式 * 将一组方法封装起来,隐藏实现细节,提供一个接口 * */class CarFactory { public: virtual ~CarFactory() {} virtual void produteEngine() = 0; vir原创 2016-08-10 23:35:25 · 1241 阅读 · 0 评论 -
23种设计模式C++实例之抽象工厂模式
抽象工厂模式在每一个系列的子系列中符合开闭原则,系列不符合。#include using namespace std;class Fruit { public: virtual ~Fruit() {} virtual void sayName() = 0;};class LocalApple: public Fruit { public: virtual void原创 2015-12-11 19:26:04 · 1337 阅读 · 0 评论