游戏设计模式学习笔记(20)工厂模式、抽象工厂模式
游戏设计模式学习笔记(20)工厂模式、抽象工厂模式
参考:
《设计模式与游戏完美开发》
《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN)
《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns)
【游戏设计模式】浅墨_毛星云: https://blog.****.net/poem_qianmo/article/details/53240330
runoob.com 设计模式:https://www.runoob.com/design-pattern/factory-pattern.html
工厂模式
定义
- 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
- Product:抽象产品,由工厂产出。
- ConcreteProduct:具体产品,这些产品都由ConcreteFactory产出。
- Factory:抽象工厂,定义能产出Produce的方法。
- ConcreteFactory:具体工厂,产生指定产品。
何时使用
- 一个类不知道它所需要的对象的类。
- 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。
优缺点
- 优点
- 一个调用者想创建一个对象,只要知道其名称就可以了。
- 屏蔽产品的具体实现,调用者只关心产品的接口。
- 缺点
- 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖
应用
- 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
- 资源加载:从Resource、本地或远程下载得到资源。
- 配合对象池使用,工厂创建产品前,先尝试从对象池中拿,产品销毁也通过工厂,即放回对象池。
抽象工厂模式
定义
- 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
- ConcreteFactory1是给环境1 时使用的,可以产生ProductA1 和 ProductB1。
- ConcreteFactory2是给环境2 时使用的,可以产生ProductA2 和 ProductB2。
应用
- 生成不同操作系统的程序。
- 一堆UI工具,NGUI、iGUI等要换的时候一套一起换。