2.6 《硬啃设计模式》第8章 复制不是很难 - 原型模式(Prototype Pattern)
2024-08-25 20:27:50
案例:
某即时战略游戏,你训练出来各种很强的战士。
为了增加游戏的可玩性,增加了一种复制魔法。实施该魔法,可以复制任意的战士。
你会怎样考虑这个设计?
在继续阅读之前,请先认真思考并写出你的设计,这样对你更好地理解本模式将会更有帮助。
分析:
1.无疑增加一个复制的方法能解决这个问题。
2.专门写一个复制类吗?传入一个战士,然后返回一个复制的战士,这样可行吗?这样做有以下问题:
1)游戏还在设计中,战士的品种还会不断演变,每增加一个品种,或者修改某品种的战士,复制类就需要修改代码。
2)为了复制好战士,复制类需要访问战士内部的属性,这样战士类可能需要暴露内部信息。
通过“原型”这两个中文字来理解原型模式是有点难度的,我们往往会用“原型开发”的“原型”来理解。
我们看看英文原型(Prototype)的解释:
the first design of something from which other forms are copied or developed.
原型模式的要点:
1.利用现成对象制作新的对象。
2.被复制的对象,需要实现clone(克隆)接口:Soldier newSoldier = oldSoldier.Clone();
类图如下:
说明:
1.每种战士实现自己的复制方法,自己可以访问自己的内部信息,复制起来很方便,也不需要对外暴露内部信息。
2.增加或者修改战士的种类,只需要修改该类便可,其它代码不受影响。
请看下一文……
最新文章
- Centos 7 开启端口
- SharePoint 2013 图文开发系列之计时器任务
- java web 学习 --第六天(Java三级考试)
- Linux的sleep()和usleep()的使用和区别
- Apache Shiro系列教程之三:Shiro的结构
- C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
- Java NIO框架Mina、Netty、Grizzly介绍与对比(zz)
- js 模拟ajax方式提交数据
- hadoop conf中xml文件修改
- 【BZOJ 1821】 [JSOI2010]Group 部落划分 Group
- fiddler Composer 构建请求
- Hadoop:Task process exit with nonzero status of 1 异常
- FTP之虚拟用户
- Autofac in webapi2
- ngnix服务器搭建
- VB用API模拟截屏键PrintScreen
- Redis 持久化之RDB和AOF
- Confluence 6 为翻译显示用户界面的键(Key)名称
- AWT和Swing的关系
- matlab global persistent变量