DOTA版设计模式——工厂方法

2023-10-19 12:30

本文主要是介绍DOTA版设计模式——工厂方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工厂方法,特征就是“方法”上,由子类实现父类的抽象方法,把创建产品的责任转移到子类中。

先上UML图:


还是以Dota游戏为例,我们的工厂是Dota中创建模型的工厂,而产品则是不同的模型。

首先我们要明确需求,Dota中需要创建N中Model,包括英雄、野怪、树木等

那么我们的产品类如下:

public   abstract   class  Model
    {
        
protected  ISkill _skill;
        
public  ISkill Skill
        {
            
get  {  return  _skill; }
            
set  { _skill  =  value; }
        }
    }

    
public   class  HeroModel : Model
    {
        
public  HeroModel()
        {
            _skill 
=   new  Theurgy();
        }
    }

    
public   class  BotWildNPCModel : Model
    {
        
public  BotWildNPCModel()
        {
            _skill 
=   new  NoSkill();
        }
    }

 细心的Dotaer已经看到,产品父类包含一个接口ISkill,这个代表技能。技能的接口以及实现如下:

 1  public   interface  ISkill
 2      {
 3           void  Action();
 4      }
 5 
 6       public   class  Theurgy : ISkill
 7      {
 8 
 9           #region  ISkill 成员
10 
11           public   void  Action()
12          {
13              LandpyForm.Form.OutputResult( " 施展法术 " );
14          }
15 
16           #endregion
17      }
18 
19       public   class  NoSkill : ISkill
20      {
21 
22           #region  ISkill 成员
23 
24           public   void  Action()
25          {
26              LandpyForm.Form.OutputResult( " 没有技能 " );
27          }
28 
29           #endregion
30      }

好了,下面该我们的主角工厂方法上场了:

 1  public   abstract   class  War3Factory
 2      {
 3           public   abstract  Model CreateModel();
 4      }
 5 
 6       public   class  HeroFactory : War3Factory
 7      {
 8           public   override  Model CreateModel()
 9          {
10               return   new  HeroModel();
11          }
12      }
13 
14       public   class  BotWildNPCFactory : War3Factory
15      {
16           public   override  Model CreateModel()
17          {
18               return   new  BotWildNPCModel();
19          }
20      }

 

这里的关键在public abstract Model CreateModel();这就是传说中的工厂“方法”,他是抽象的,没有实现,具体实现在集成他的子类中。有两个子类,一个是英雄工厂HeroFactor,一个是野怪工厂BotWildNPCFactory,他们都实现了父类的抽象方法。

再来看下客户端调用代码:

1  DotaPatternLibrary.FactoryMethod.War3Factory war3Factory  =   new  DotaPatternLibrary.FactoryMethod.HeroFactory();
2 DotaPatternLibrary.FactoryMethod.Model model  =  war3Factory.CreateModel();
3 model.Skill.Action();
4 war3Factory  =   new  DotaPatternLibrary.FactoryMethod.BotWildNPCFactory();
5 model  =  war3Factory.CreateModel();
6 model.Skill.Action();

 


转载于:https://www.cnblogs.com/pangxiaoliang/archive/2009/07/26/1503081.html

这篇关于DOTA版设计模式——工厂方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239770

相关文章

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St