设计模式5 - 工厂方法模式【Factory Method Pattern】

工厂方法模式

定义:
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

例子(女娲造人):

类图:
这里写图片描述

代码:

public class HumanFactory { 

    //定义一个MAP,初始化过的Human对象都放在这里
    private static HashMap<String,Human> humans = new HashMap<String,Human>(); 

    //定一个烤箱,泥巴塞进去,人就出来,这个太先进了
    public static Human createHuman(Class c){ 

         Human human=null; //定义一个类型的人类

         try { 
             //如果MAP中有,则直接从取出,不用初始化了
             if(humans.containsKey(c.getSimpleName())){ 
                 human = humans.get(c.getSimpleName()); 
             }else{ 
                 human = (Human)Class.forName(c.getName()).newInstance(); 
                 //放到MAP中
                 humans.put(c.getSimpleName(), human); 
             } 
     } catch (InstantiationException e) {
         //你要是不说个人类颜色的话,没法烤,要白的黑,你说话了才好烤
         System.out.println("必须指定人类的颜色"); 

    } catch (IllegalAccessException e) { 
         //一定定义的人类有问题,那就烤不出来了,这是...
         System.out.println("人类定义错误!"); 

    } catch (ClassNotFoundException e) {
          //你随便说个人类,我到哪里给你制造去?!
         System.out.println("混蛋,你指定的人类找不到!"); 

    } 
    return human; 
 } 
} 

总结:
HumanFatcory是一个工厂,主要用来生产人类,当高层代码需要获取人类时,直接从工厂获取。同时这里使用了延迟初始化,一个对象初始化完毕后就不释放,等到再次用到得就不用再次初始化了,直接从内存过中拿到就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值