A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李江 中级黑马   /  2013-8-10 20:34  /  822 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 graspDN 于 2013-8-10 20:37 编辑

代码:
  1. public class Factory
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 ArmFactory af = new ArmFactory();
  6.                 Arm a = null;
  7.                 a = af.getArm("Gun");
  8.                 if(a!=null)
  9.                 {
  10.                         a.fire();
  11.                 }
  12.                 /*a = af.getArm("tank");
  13.                 if(a!=null)
  14.                 {
  15.                         a.fire();
  16.                 }*/
  17.                
  18.         }
  19. }
  20. class ArmFactory//工厂
  21. {
  22.         public static Arm getArm(String type)
  23.         {
  24.                 Arm a = null;
  25.                 if ("Gun".equals(type))
  26.                 {
  27.                         a = new Gun();
  28.                 }
  29.                 else if ("Cannon".equals(type))
  30.                 {
  31.                         a = new Cannon();
  32.                 }
  33.                 else
  34.                 {
  35.                         System.out.println("小厂产不了您要的武器");
  36.                         return null;
  37.                 }
  38.                 return a;
  39.                         
  40.         }
  41. }
  42. abstract class Arm //抽象武器类
  43. {
  44.         //开火
  45.         public abstract void fire();
  46.         //没子弹了
  47.         public abstract void unfire();
  48. }

  49. class Gun extends Arm//实体
  50. {
  51.         //开火
  52.         public void fire()
  53.         {
  54.                 System.out.println("AK47来啦");
  55.         }
  56.         //没子弹了
  57.         public void unfire()
  58.         {
  59.                 System.out.println("子弹打光了,跑吧");
  60.         }
  61. }

  62. class Cannon extends Arm
  63. //实体
  64. {
  65.         //开火
  66.         public void fire()
  67.         {
  68.                 System.out.println("火箭炮来啦");
  69.         }
  70.         //没子弹了
  71.         public void unfire()
  72.         {
  73.                 System.out.println("没炮弹啦,跑吧");
  74.         }
  75. }
复制代码
模式中包含的角色及其职责:
    工厂(ArmFactory)角色
        简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
    抽象产品(Arm)角色
       简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
    具体产品(Gun)角色
        是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
优点
    工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点
    由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
实质
    简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

工厂模式.png (22.18 KB, 下载次数: 26)

Demo

Demo

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马