`
NumberWen
  • 浏览: 30833 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

读40020072 朋友的"工厂模式运用-锻造武器"理解和感想

阅读更多

费话少说,如果还没有人知道我写这篇文章的原因,可以先点击以下这个website查看题目
http://www.iteye.com/topic/233420
以下是我的程序片断,如果我的design不太好,欢迎各位大大拍砖
ps:技术改变生活,拍砖驱动编程


根据题目分析对像个数
 
  1)Material 材料parent object

   

  

package model;

public class Material {
 
 private String type;
 
 private String name;
 
 private int weight;
 
 public Material(String type,String name, int weight) {
  super();
  this.type = type;
  this.name = name;
  this.weight = weight;
 }

 @Override
 public String toString() {
  return "类型:" + type + " >>>>材料名称:" + name + ">>>>>重:" + weight;
 }
}

  
  
  
  2)Material的child object
 
        MedicinalLiquidMaterial  药水材料

 

  

package model;

public class MedicinalLiquidMaterial extends Material{
 public MedicinalLiquidMaterial(String name, int weight) {
  super("药水",name,weight);
 }
}

  

 

     OreMaterial 矿石材料

     

       

   

package model;

public class OreMaterial extends Material{
 public OreMaterial(String name, int weight) {
  super("矿石",name,weight);
 }
}

  

 

    OriginMaterial 源生材料

 

     

package model;

public class OriginMaterial extends Material{
 public OriginMaterial(String name, int weight) {
  super("源生",name,weight);
 }
}

 

   

  

    3)Arm 武器的parent object

   

package model;

public class Arm {
 
 //名称
 private String name;
 
 //伤害
 private int hurt;
 
 //重量
 private int weight;
 
   //所属职业
 private String job;
 
 //武器类型
    public static String ARMTYPE_THUNDERBOLT = "thunderbolt";
 
    public static String ARMTYPE_DRAGONFISTHAMMER = "dragonfistHammer";

 public Arm(String name, int hurt, int weight, String job) {
  super();
  this.hurt = hurt;
  this.name = name;
  this.weight = weight;
  this.job = job;
 }
 
 @Override
 public String toString() {
  return "武器名称:"+ name +">>>>>伤害:"+ hurt +">>>>>>>重量:"+weight+">>>>>>>所属职业:"+job;
 }
 
}

 

 

  

 

   4)Arm 武器的chlid object

 

    DragonfistHammer  龙拳之锤

 

  

    

package model;


public class DragonfistHammer extends Arm{
 public DragonfistHammer() {
  super("龙拳之锤",10000,500,"野蛮人");
 }
}

 

    

    Thunderbolt     雷霆

 

 

    

package model;


public class Thunderbolt extends Arm{
 public Thunderbolt() {
  super("雷霆",3000,200,"剑士");
 }
}

 

 

 

根据题目分析工厂实现

 

   1)MaterialFactoryIfc 材料工厂接口

 

  

package factory;
import model.MedicinalLiquidMaterial;
import model.OreMaterial;
import model.OriginMaterial;


public interface MaterialFactoryIfc {
 
 //获得矿石
 public OreMaterial getOreMaterial();
 
 //获得源生材料
 public OriginMaterial getOriginMaterial();
 
 //获得药水
 public MedicinalLiquidMaterial getMedicinalLiquidMaterial();
 
 //那里出产的
 public String getCityName();
}

 

 

 

  2)各地方材料工厂实现类

 

  OrgrimmarMaterialFactory 奥格瑞玛材料工厂

 

   

package factory.impl;
import factory.MaterialFactoryIfc;
import model.MedicinalLiquidMaterial;
import model.OreMaterial;
import model.OriginMaterial;

/**
 * 奥格瑞玛材料工厂
 * @author Administrator
 *
 */
public class OrgrimmarMaterialFactory implements MaterialFactoryIfc {

 public MedicinalLiquidMaterial getMedicinalLiquidMaterial() {
  return new MedicinalLiquidMaterial("超级活力药水",100);
 }

 public OreMaterial getOreMaterial() {
  return new OreMaterial("氪金",100);
 }

 public OriginMaterial getOriginMaterial() {
  return new OriginMaterial("原生空气",100);
 }

 public String getCityName() {
  return "奥格瑞玛";
 }
}

 

  

 ShaTasiMaterialFactory 沙塔斯材料工厂

 

     

package factory.impl;
import factory.MaterialFactoryIfc;
import model.MedicinalLiquidMaterial;
import model.OreMaterial;
import model.OriginMaterial;

/**
 * 沙塔斯材料工厂
 * @author Administrator
 *
 */
public class ShaTasiMaterialFactory implements MaterialFactoryIfc {

 public MedicinalLiquidMaterial getMedicinalLiquidMaterial() {
  return new MedicinalLiquidMaterial("魔能法力药水",100);
 }

 public OreMaterial getOreMaterial() {
  return new OreMaterial("恒金",100);
 }

 public OriginMaterial getOriginMaterial() {
  return new OriginMaterial("原生之火",100);
 }

 public String getCityName() {
  return "沙塔斯";
 }
}

 

  

    StormCityMaterialFactory  暴风城材料工厂

 

   

package factory.impl;
import factory.MaterialFactoryIfc;
import model.MedicinalLiquidMaterial;
import model.OreMaterial;
import model.OriginMaterial;

/**
 * 暴风城材料工厂
 * @author Administrator
 *
 */
public class StormCityMaterialFactory implements MaterialFactoryIfc {

 public MedicinalLiquidMaterial getMedicinalLiquidMaterial() {
  return new MedicinalLiquidMaterial("超级活力药水",100);
 }

 public OreMaterial getOreMaterial() {
  return new OreMaterial("恒金",100);
 }

 public OriginMaterial getOriginMaterial() {
  return new OriginMaterial("源生之土",100);
 }

 public String getCityName() {
  return "暴风城";
 }

}

 

  

 

根据题目分析对像间的相互联系和作用

 

     ForgeIfc 锻造接口

 

      

package action;
import model.Arm;

/**
 * 锻造接口
 * @author Administrator
 *
 */
public interface ForgeIfc {
 
 //锻造武器
 public Arm forge();
}

  

 

   ForgeArm  实现锻造接口的抽像类

 

 

package action.impl;
import action.ForgeIfc;
import model.Arm;
import model.DragonfistHammer;
import model.Material;
import model.Thunderbolt;


public abstract class ForgeArm implements ForgeIfc{
    
 //所需材料
 protected Material[] material;
 
 //锻造的武器
 protected Arm arm;

 //锻造的武器类型
 protected String armType;
 
 //锻造的武器编号
 private static int PRODUCT_NUMBER = 0;
 
 /**将材料放进火炉*/
 public abstract void putMaterial();

 /**根据武器类型 锻造武器*/
 public Arm forge() {
  System.out.println("******* 锻造开始 ******");
  for(int i =0 ; i < material.length; i++) {
   int step = i+1;
   System.out.println("第"+ step +" 步放入:"+ material[i].toString());
   System.out.println("******* 锻造中 ******");
  }
  
  System.out.println("******* 锻造结束 ******");
  
  ++PRODUCT_NUMBER;
  
  if(Arm.ARMTYPE_THUNDERBOLT.equals(armType)) {
   
   arm = new Thunderbolt();
   
  }else if(Arm.ARMTYPE_DRAGONFISTHAMMER.equals(armType)) {
   
   arm = new DragonfistHammer();
   
  }
  
  return arm;
 }

 @Override
 public String toString() {
   return "本次锻造武器编号为:"+ PRODUCT_NUMBER +">>>>>>描述:" +arm.toString();
 }
}

 

   

  ForgeDragonfistHammer 锻造龙拳之锤

 

 

package action.impl;
import model.Arm;
import model.Material;
import model.OreMaterial;
import model.OriginMaterial;

/**
 * 锻造龙拳之锤
 * @author Administrator
 *
 */
public class ForgeDragonfistHammer extends ForgeArm{
 
 //矿石
 private OreMaterial ore;
 
 //源生材料
 private OriginMaterial origin;
 
 /**锻造龙拳之锤*/
 public ForgeDragonfistHammer(OreMaterial ore, OriginMaterial origin) {
  this.ore = ore;
  this.origin = origin;
  putMaterial();
 }

 /**实现抽像的锻造武器的放进材料方法*/
 public void putMaterial() {
  this.material = new Material[]{this.ore,this.origin};
  this.armType = Arm.ARMTYPE_DRAGONFISTHAMMER;
 }
}

  

 

 ForgeThunderbolt 锻造雷霆

 

 

package action.impl;
import model.Arm;
import model.Material;
import model.MedicinalLiquidMaterial;
import model.OreMaterial;
import model.OriginMaterial;

/**
 * 锻造雷霆
 * @author Administrator
 *
 */
public class ForgeThunderbolt extends ForgeArm{
 
 //矿石
    private OreMaterial ore;
 
    //源生材料
 private OriginMaterial origin;
 
 //药水
 private MedicinalLiquidMaterial medicinalLiquid;
 
 /**锻造雷霆*/
 public ForgeThunderbolt(OreMaterial ore, OriginMaterial origin, MedicinalLiquidMaterial medicinalLiquid) {
  this.ore = ore;
  this.origin = origin;
  this.medicinalLiquid = medicinalLiquid;
  putMaterial();
 }

 /**实现抽像的锻造武器的放进材料方法*/
 public void putMaterial() {
  this.material = new Material[]{this.ore,this.origin,this.medicinalLiquid};
  this.armType = Arm.ARMTYPE_THUNDERBOLT;
 }
}

  

 

 

 

   CityForge 城市的锻造技术

  

   

package action;

import action.impl.ForgeDragonfistHammer;
import action.impl.ForgeThunderbolt;
import factory.MaterialFactoryIfc;
import model.DragonfistHammer;
import model.Thunderbolt;

/**
 * 城市的锻造技术
 * @author Administrator
 *
 */
public class CityForge {
   
   //材料工厂
   private MaterialFactoryIfc materialFactory;
   
   public CityForge(MaterialFactoryIfc materialFactory) {
    this.materialFactory = materialFactory;
   }
   
   /**
    * 某城市锻造雷霆
    * @return Thunderbolt
    */
   public Thunderbolt forgeThunderbolt() {
    System.out.println("==============您在"+ materialFactory.getCityName() +"锻造============");
    return (Thunderbolt)new ForgeThunderbolt(materialFactory.getOreMaterial(),materialFactory.getOriginMaterial(),materialFactory.getMedicinalLiquidMaterial()).forge();
   }
   
   
   /**
    * 某城市锻造龙拳之锤
    * @return DragonfistHammer
    */
   public DragonfistHammer forgeDragonFistHammer() {
    System.out.println("==============您在"+ materialFactory.getCityName() +"锻造============");
    return (DragonfistHammer)new ForgeDragonfistHammer(materialFactory.getOreMaterial(),materialFactory.getOriginMaterial()).forge();
   }
}

  

 

最后测试

 

   

package test;
import action.CityForge;
import factory.impl.OrgrimmarMaterialFactory;
import factory.impl.ShaTasiMaterialFactory;
import factory.impl.StormCityMaterialFactory;


public class TestForgeArm{
 public static void main(String args[]) {
  //在暴风城锻造龙拳之锤
     System.out.println(new CityForge(new StormCityMaterialFactory()).forgeDragonFistHammer().toString());
        //在暴风城锻造雷霆
     System.out.println(new CityForge(new StormCityMaterialFactory()).forgeThunderbolt().toString());
     
     //在奥格瑞玛锻造龙拳之锤
     System.out.println(new CityForge(new OrgrimmarMaterialFactory()).forgeDragonFistHammer().toString());
     //在奥格瑞玛锻造雷霆
     System.out.println(new CityForge(new OrgrimmarMaterialFactory()).forgeThunderbolt().toString());
    
        //在沙塔斯锻造龙拳之锤
     System.out.println(new CityForge(new ShaTasiMaterialFactory()).forgeDragonFistHammer().toString());
     //在沙塔斯锻造雷霆
     System.out.println(new CityForge(new ShaTasiMaterialFactory()).forgeThunderbolt().toString());
 }
}

 

 总结:

    引述: 工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。

    抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。(抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,这样一来,客户就从具体的产品被解耦)


 

正如以上那位仁兄所讲的,外加本人对工厂模式的理解就是将产生对像的行为变化控制在某个地方(工厂)

 

这是本人在javaeye的第一贴,欢迎各位大大拍砖

 

 技术改变生活,拍砖驱动编程

分享到:
评论

相关推荐

    读40020072 朋友的\"工厂模式运用-锻造武器\"理解和感想

    标题中的“工厂模式运用-锻造武器”指的是软件设计模式中的工厂模式,这是一種常用的面向对象设计模式。在本文中,作者通过一个“锻造武器”的比喻来解释工厂模式的概念和应用,试图帮助读者理解如何在实际编程中...

    游戏设计4-工厂模式-锻造武器

    在这个“游戏设计4-工厂模式-锻造武器”的主题中,我们将深入探讨工厂模式如何应用于游戏中的武器锻造过程,以及如何通过源码实现这一功能。 工厂模式的核心思想是提供一个接口或类,用于创建相关或依赖对象的家族...

    行业文档-设计装置-锻造平台.zip

    《锻造平台设计与应用》 在现代工业制造领域,锻造平台是不可或缺的重要设备之一,尤其在机械、航空航天、汽车等重工业行业中起着至关...因此,对锻造平台的深入理解和研究,是提高整个锻造产业链竞争力的关键环节。

    网站模板-锻造企业网站(蓝色).rar.rar

    网站模板是构建网页的一种快速方式,它为网页设计提供了预设的布局、色彩搭配和样式,使得非专业设计师也能创建出美观且功能齐全的网站。"网站模板-锻造企业网站(蓝色).rar.rar"是一个专门为锻造企业设计的网站模板...

    2021-2025年中国锻造行业基于产业痛点研究与战略决策咨询报告.pdf

    - 行业特有的经营模式和周期性、区域性、季节性特征 - 军工行业的特殊性及其与上下游行业的关联性 4. 中国锻造行业市场发展现状与趋势 - 行业发展格局和2020-2021年的发展情况 - 行业的竞争格局和主要企业情况 ...

    20210311-麦肯锡-全球银行业年度报告(2020):锻造韧性,银行业如何走出危机、逆境重生.pdf

    《***-麦肯锡-全球银行业年度报告(2020):锻造韧性,银行业如何走出危机、逆境重生》这份报告在当前全球经济动荡、特别是新冠疫情大流行这一特殊背景下,分析了全球银行业的现状和未来发展趋势,尤其关注于银行业...

    电信设备-锻造铝合金轮毂的生产过程中喷粉工艺.zip

    总的来说,锻造铝合金轮毂的生产过程中的喷粉工艺是一门集材料科学、表面工程和工艺控制于一体的复杂技术,对于提升电信设备的耐用性和整体性能具有重要意义。了解并掌握这一工艺,对于电信设备制造商来说至关重要。

    华为铁三角工作法-锻造持续打胜仗销售团队的落地路径

    【华为铁三角工作法】是华为公司在其销售管理中运用的一种高效协作模式,该方法以其强大的协同性和进攻性,为华为赢得了8900亿的辉煌战绩。这一工作法的核心在于构建一个由客户经理、解决方案专家和交付专家组成的...

    房地产 -锻造项目部施工成本控制高手.pdf

    在房地产项目施工中,成本控制是一项至关重要的任务,关乎...通过以上各环节的精细管理和索赔策略的运用,施工单位可以在低价投标的情况下,通过合理的成本控制和有效的索赔管理,实现扭亏为盈,提升项目的经济效益。

    JB-T 6055—92 锻造车间环境保护导则.doc

    在当前全社会高度关注环保问题的背景下,该导则的出台,为我国锻造行业提供了一种全新的绿色发展模式。它不仅规范了行业行为,也引领了行业向绿色制造转型的方向。通过实现生产过程的绿色化,锻造企业将能够在提高...

    2021-2025年中国锻造行业调研及痛点营销战略研究报告.pdf

    从提供的文件内容中可以提取到以下关于锻造行业的知识点: ...这些知识点能够帮助理解锻造行业的现状、发展以及企业在市场中的位置,对于企业制定战略、评估市场和识别风险都有着重要的参考价值。

    模拟游戏武器锻造_游戏_ASP游戏_蜀门_

    标题中的“模拟游戏武器锻造”指的是一个以游戏内的武器锻造过程为模拟对象的应用程序。这种类型的游戏通常允许玩家体验从原材料收集到武器制作的全过程,从而提升角色的能力或获得独特的装备。在ASP(Active Server...

    2021-2025年中国锻造行业市场细分策略研究报告.pdf

    - 发展特征:分析锻造行业的技术特点、进入行业的障碍、特有的经营模式,以及行业周期性、区域性、季节性的特点。 - 军工行业的特殊性:讨论军工行业对锻造产品的需求特点,如产品的定制化需求、国产化需求等。 ###...

    基于java的-139-net东风锻造有限公司点检管理系统-源码.zip

    通过阅读和理解源码,可以深入理解Java在企业级应用中的实际运用,学习如何设计和实现一个完整的管理系统,同时也能了解设备点检管理的具体业务流程和技术实现。然而,由于没有具体的系统文档,理解源码可能需要具备...

    行业资料-交通装置-一体锻造式自行车座管的束紧构造.zip

    行业资料-交通装置-一体锻造式自行车座管的束紧构造.zip

    行业分类-设备装置-大型锻造液压机动横梁三自由度位移随动测量平台及方法.zip

    该技术涉及了机械工程、自动化控制和传感器技术等多个领域的知识,旨在提高锻造过程的精度和效率。 在大型锻造过程中,液压系统扮演着至关重要的角色。液压机动横梁是此类设备的关键组成部分,它通过液压驱动实现大...

    三角防务-300775-航空锻造小巨人的产业链进击之路.rar

    三角防务-300775-航空锻造小巨人的产业链进击之路.rar

    锻造技术PPT学习教案.pptx

    以上内容详细介绍了锻造技术中的核心概念和操作步骤,对于理解金属塑性变形和自由锻的实践应用具有重要指导意义。学习并掌握这些知识,能帮助我们更好地设计和实施锻造工艺,提升金属制品的质量和生产效率。

    java-ssm+vue-xx锻造公司点检管理系统实现源码

    java-ssm+vue-xx锻造公司点检管理系统 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat...

    Al-Fe-Cr-Ti合金等温锻造微观组织与力学性能研究

    研究表明,在不同的应变速率和变形温度下进行等温锻造,合金的微观组织变化不大,显示出一定的锻造工艺稳定性。 【微观组织的变化】 尽管微观组织变化微小,但等温锻造仍能影响合金的性能。锻造过程中,合金的微观...

Global site tag (gtag.js) - Google Analytics