• 2.6 《硬啃设计模式》第8章 复制不是很难


    案例:
    某即时战略游戏,你训练出来各种很强的战士。
    为了增加游戏的可玩性,增加了一种复制魔法。实施该魔法,可以复制任意的战士。
    你会怎样考虑这个设计?

    在继续阅读之前,请先认真思考并写出你的设计,这样对你更好地理解本模式将会更有帮助。

    分析:
    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.png

    说明:
    1.每种战士实现自己的复制方法,自己可以访问自己的内部信息,复制起来很方便,也不需要对外暴露内部信息。

    2.增加或者修改战士的种类,只需要修改该类便可,其它代码不受影响。



    请看下一文……
     
     
     
     
     
     
     
     
     
     
     
     

    作者:张传波

    创新工场创业课堂(敏捷课程)讲师

    软件研发管理资深顾问

    CMMI首席专家

    《火球——UML大战需求分析》作者

    《硬啃设计模式》作者

    www.umlonline.org创办人


  • 相关阅读:
    Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
    webpack配置react--ts项目
    防抖(debounce)和节流(throttle)
    js~eventLoop 事件循环
    在Vue 项目中使用echarts
    JS
    ImmuableJS 简单入门用法
    Redux-小案例-加一操作
    Oberver.js
    react-jsx语法
  • 原文地址:https://www.cnblogs.com/pangblog/p/3400380.html
Copyright © 2020-2023  润新知