zoukankan      html  css  js  c++  java
  • 从王者荣耀看设计模式(简单工厂模式)

    从王者荣耀看设计模式(简单工厂模式)

    一.简介

    游戏开始前,玩家可从英雄池自由挑选将要出战的英雄

    二.简单工厂模式

    简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    模式动机
    在实际的软件开发过程中,有时需要创建一些来自相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有相同的父类。在这种情况下,可以通过传入不同的参数从而获得不同的对象。在本实例中,存在一个英雄的工厂,传入英雄的名称便可得到该英雄的实例。

    • 这其中的设计原则有:
    1. 有一个专门的类来负责创建实例的过程。具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。
    2. 简单工厂模式中包含的角色及其相应的职责如下:

      工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
      抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
      具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

    • 简单工厂模式的优点
      用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化
    • 简单工厂模式的缺点
    1. 由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”
    2. 简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。

    三.结构图

    结构图

    四.设计类图

    类图

    五.代码实现

    HeroFactory(简单工厂类)根据玩家选择创建相应类的实例

    package com.game.Factory;
    /*
     * 简单工厂类(提供创建接口)
     */
    import com.game.domain.Hero;
    import com.game.domain.HouYi;
    import com.game.domain.LuBanQiHao;
    
    public class HeroFactory {
    	public static Hero createHero(String HeroName) throws Exception {
    		//传入HouYi,工厂创建并返回HouYi实例
    		if(HeroName.equalsIgnoreCase("HouYi")) {
    			return new HouYi();
    		}else if(HeroName.equalsIgnoreCase("LuBanQiHao")){
    		//传入LuBanQiHao,工厂创建并返回LuBanQiHao实例
    			return new LuBanQiHao();
    		}else {
    			throw new Exception();//抛出异常
    		}
    	}
    }
    

    HeroFactoryTest测试类

    package com.game.test;
    /*
     * 英雄工厂测试类
     */
    
    import com.game.Factory.HeroFactory;
    import com.game.domain.Hero;
    
    public class HeroFactoryTest {
    	public static void main(String [] args) {
    		//使用工厂的创建工厂方法,传入英雄的名称,由工厂创建英雄
    		try {
    			//1.选择英雄后羿
    			System.out.println("=======choose1=======");
    			System.out.println("请选择你的英雄:");
    			//向工厂传入英雄的名称
    			Hero hero1 = HeroFactory.createHero("HouYi");
    			System.out.println("您选择的英雄是【"+hero1.getHeroName()+"】");
    			hero1.display();
    			//2.选择英雄鲁班七号
    			System.out.println("=======choose2========");
    			System.out.println("请选择你的英雄:");
    			//向工厂传入英雄的名称
    			Hero hero2 = HeroFactory.createHero("LuBanQiHao");
    			System.out.println("您选择的英雄是【"+hero2.getHeroName()+"】");
    			hero2.display();
    		}catch(Exception e) {//捕捉异常
    			System.out.println("不存在此英雄!");
    		}
    	}
    }
    
    

    六.运行结果

    结果

    七.源代码下载

    从王者荣耀看设计模式

  • 相关阅读:
    【转载】C#中List集合使用Remove方法移除指定的对象
    【转载】C#中List集合使用RemoveAt方法移除指定索引位置的元素
    【转载】C#中ToArray方法将List集合转换为对应的数组
    【转载】C#中List集合使用RemoveRange方法移除指定索引开始的一段元素
    【转载】C#中Add方法将往List集合末尾添加相应元素对象
    【转载】C#中List集合使用Reverse方法对集合中的元素进行倒序反转
    【转载】C#中通过Distinct方法对List集合进行去重
    【转载】 C#中使用CopyTo方法将List集合元素拷贝到数组Array中
    【转载】 C#中通过Where方法查找出所有符合条件的元素集合
    Android -- Camera聚焦流程
  • 原文地址:https://www.cnblogs.com/miaowulj/p/11441577.html
Copyright © 2011-2022 走看看