设计模式推演——创建型模式

上一篇文章中提到,在做代码设计时,坚持OCP原则,坚持一起从需求分析开始,分析当前代码中哪些是不变的,哪些是变化的,那么我们就可以做到简单而快速的响应客户需求。现在,我们来讨论创建型模式


还是从需求分析开始,使用创建型模式,实际是为了将类名和类的创建解耦。换成变与不变的说法就是,产品名称可能经常发生变化或者有扩充,但是这些产品对象的使用方式不变。

假设我们现在有产品类Wall(A,B,...)和 Door(A,B, ...), 以及使用产品的类MazeGame ( 这里借用了《DesignPattern》一书中一些对象名称,但设计上有略微不同)



1.   对类的创建用一个工厂类或者工厂方法【封装】,这就得到了简单工厂模式。


2.  进一步,对上面的 工厂类应用【多态化】,这就得到了抽象工厂模式


3.  再进一步,实际上我们最终要得到的产品是Maze对象,假设Maze产品的组装是比较复杂但方法是固定不变的,只是构成的组件Wall和Door有变化,那么可以进一步将Maze的组装过程也【封装】起来,得到builder模式。

     当然,应用builder模式时,我们实际上还会基于一个因素:易用性。  builder模式是将产品一个组建一个组件的构造,每个组件的构造可能都有不同的参数。如果直接使用一个方法创建,那么就要一下子传入很多参数,这是种很难使用的代码。


4. 直接对MazeGame中的buildMaze()应用多态化,就可以得到FactoryMethod。  

(当然实际上若只是为了Maze的创建,而构造下面这样一个继承体系,可不是个好主意。一般会考虑子类中有更多的需要重写的行为时,才会应用工厂方法)



5. 其他几种创建型模式,并没有应用什么设计原则,

    像Prototype模式,只是为了实现 虚拷贝构造函数 的效果

       Singleton模式, 只是为了保证变量必定被初始化,或者 类实例的唯一性。



6. 创建型模式与重构

如果需要在已有代码中通过重构引入创建型模式,有两点需要考虑的:

1. 结构上不难实现,只是比较麻烦,需要找到各种分散的new XXX()代码, 先以某个静态创建方法代替。

2. 这项重构很多时候是安全的,即使没有找全,至少原来代码创建的还是正确的对象。

具体重构细节,可以参考《重构——改善既有代码的设计》一书中  ExtractSubclass, ExtractClass,  Replace Typecode with Subclass/State 这四个方法。


忘了再次强调一下,引入创建型模式是为了将对象的创建与对象的使用解耦,正如上面所展示的,当增加新的产品类 DoorC、WallC时,虽然需要对现有工厂类进行修改(都只是扩展),但是对产品的使用类MazeGame,则不需要做任何变更。



   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模拟作战仿真是一种利用计算机技术进行的战争模拟训练方式,可用于对战争场景的推演和决策制定进行测试和评估。以下是模拟作战仿真作战想定推演设计方案的详细说明: 1. 制定推演目标:确定仿真推演的目标和要解决的问题,例如评估某个作战计划的可行性、优化部队配置方案等。 2. 确定推演范围:根据推演目标确定推演范围,包括作战时间、空间、参与方等。这有助于仿真场景的设计和实施。 3. 设计推演环境:根据推演范围和目标,设计仿真场景和作战环境。包括建模战场地形、气候、资源分布等因素,模拟各种现实情况和事件,以便更真实地反映作战场景。 4. 确定推演参与方:确定仿真作战中的参与方,包括友方、敌方、中立方等。为每个参与方设置属性、行动指令、战术等,以便在仿真中反映其行为和决策。 5. 设定推演规则:制定仿真作战的规则和流程,包括部队指挥、作战行动、战斗伤亡等。通过制定规则和流程,确保仿真作战的公正、客观、科学。 6. 进行仿真作战:根据设计好的推演方案和场景,进行仿真作战。通过计算机程序模拟各参与方的行动和反应,生成仿真结果。 7. 评估仿真结果:根据仿真结果,评估推演的目标和解决的问题。分析仿真结果,找出问题所在,为制定更好的作战计划和决策提供依据。 总之,模拟作战仿真作战想定推演设计方案需要制定推演目标、确定推演范围、设计推演环境、确定推演参与方、设定推演规则、进行仿真作战和评估仿真结果。通过科学合理的仿真设计和实施,可以提高决策者的决策水平和军事人员的实战能力,为国防建设提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值