23种设计模式 之简单工厂模式

一、定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

二、优点

良好的封装性,代码结构清晰,扩展性非常优秀,屏蔽产品类,产品类的调用不影响调用者。

三、故事继续(代码示例)

这天一大早,李实名就把空明,曹草,黑子都叫来办公室,刚一进门,李实名就说到:

“近来很忙吧?”

“还好,还好....."谁敢说忙啊?!想被炒鱿鱼啊.....

“最近我们酒楼的整体差不多了,但是主要的是 我们做什么菜呢?你们也知道中华美食太大,很难选择..”

“我们应该选择一个或者两个菜系主打,其他的先放一放......”空明说道。

“没错,我们也是这样想的......”曹草赶紧插一句,同时望了一眼空明。

“那我们做哪种菜系呢?黑子你说。”

“我觉得,现在主流的菜系很多,我们不可能一一做到,不如川菜和粤菜好了?!”

“哦,你们两个呢,觉得黑子说的怎么样?”

“好好,好啊.....”两个家伙忙不迭的说道。

“OK,就这么说定了!哈哈哈......黑子,这段时间你得多操点心啊?”

“没问题!”

于是这酒楼就选择了粤菜和川菜两大菜系做为主打,那要怎么生产呢?这可够黑子头疼的...

首先,菜是产品,厨房是“工厂”,于是我们选择工厂模式(其他的也行)

                                                  1 产品的抽象类(就是 菜)

package JianDan;  
public abstract class Cai  
{  
    public abstract void jieShao();  
}

                                                     2 川菜 抽象菜的实现类1

package JianDan;  
   
public class ChuanCai extends Cai  
{  
    @Override  
    public void jieShao()  
    {  
        System.out.println("这是川菜,辣的要死!");  
    }  
}

                                               3 粤菜 抽象菜的实现类2 

package JianDan;  
public class YueCai extends Cai  
{  
    @Override  
    public void jieShao()  
    {  
        System.out.println("这是粤菜,甜到要死!");  
    }  
      
}

                                             4 厨房 在这里做菜

package JianDan;  
public class ChuFang  
{  
    public static <T extends Cai> T createCai(Class<T> c)  
    {  
        Cai cai = null;  
        try {  
            cai = (Cai)Class.forName(c.getName()).newInstance();  
        }  
        catch (Exception e)   
        {  
            e.printStackTrace();  
        }  
        return (T)cai;  
    }  
}  

                                          5 场景类 生产过程

package JianDan;  
public class Client  
{  
    public static void main(String[] args)  
    {  
        //生产粤菜  
        System.out.println("...........第一种菜系..........");  
        Cai yueCai = ChuFang.createCai(YueCai.class);  
        yueCai.jieShao();  
        //生产川菜  
        System.out.println("...........第二种菜系..........");  
        Cai chuanCai = ChuFang.createCai(ChuanCai.class);  
        chuanCai.jieShao();  
    }  
} 

大功告成,黑子很开心,他叫来李实名和两位同僚,一起视察厨房:

...........第一种菜系..........

这是粤菜,甜到要死!

...........第二种菜系..........

这是川菜,辣的要死!

成功了,李实名觉得很满意:
“干得好,黑子!”
“哪里哪里....您领导的好才是....”
这是空明脸色阴郁,说道:
“boss,现代人中有许多人,他们不吃荤菜,他们说什么 ‘田园生活’ ,我们可不可以在川菜和粤菜中都区分出荤菜和素菜呢?”说完,深深地看了黑子一眼。
“MMD......”黑子心想,不过嘴上还是说“多谢空总管提醒,我试试吧”
黑子能不能成功呢?下次再讲.........................

作者: saoba 发表于 2011-06-11 18:55 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架