5、工厂方法模式

推荐文章:最易懂的设计模式系列解析:简单工厂模式https://blog.csdn.net/carson_ho/article/details/52343584   


下面介绍的是一种最基本的一种工厂方法模式

 女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,但是待的时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?

    别忘了她是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创造人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:

    第一次烤泥人,滋滋滋滋~~,感觉应该收了,往地上一扔,biubiu,一个白人诞生了,没靠手!

    第二次烤泥人,滋滋滋滋~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪!

    第三次烤泥人,滋滋滋滋~~,一边烤一边看着,嘿,刚刚好,Perfect! 优品,黄色人种!

   

 用代码来实现:

目录:

扫描二维码关注公众号,回复: 33319 查看本文章



Human.java

package No5_FactoryMethodPattern;

/**
 * 定义一个人的接口,作为一个人,需要有下面三种动作
 */
public interface Human {
    public void laugh();

    public void cry();

    public void talk();
}

YellowHuman.java

package No5_FactoryMethodPattern;

/**
 * 定义具体的人种
 * 黄色人种
 */
public class YellowHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("黄种人会大笑");
    }

    @Override
    public void cry() {
        System.out.println("黄种人会哭");
    }

    @Override
    public void talk() {
        System.out.println("黄种人会说话,一般说的都是双字节");
    }
}

WhiteHuman.java

package No5_FactoryMethodPattern;

/**
 * 定义到具体的人种
 * 白色人种
 */
public class WhiteHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("白种人会大笑");
    }

    @Override
    public void cry() {
        System.out.println("白种人会哭");
    }

    @Override
    public void talk() {
        System.out.println("白种人会说话,一般都是单字节的");
    }
}

BlackHuman.java

package No5_FactoryMethodPattern;

/**
 * 定义到具体的人种
 * 黑色人种
 */
public class BlackHuman implements Human {
    @Override
    public void laugh() {
        System.out.println("黑种人会大笑");
    }

    @Override
    public void cry() {
        System.out.println("黑种人会哭");
    }

    @Override
    public void talk() {
        System.out.println("黑种人会说话");
    }
}

HumanFactory.java

package No5_FactoryMethodPattern;

/**
 * 今天讲女娲造人的故事,这个故事梗概是这样的:
 * 很久很久以前,盘古开辟了天地,用身躯造出了日月星辰、山川草木,天地一片繁华
 * 有一天,女娲下界走了一遭,哎,太寂寞,太孤独了,没个会笑的、会哭的、会说话的东东
 * 那怎么办呢?不用愁,女娲,神仙呀,造出来呀,然后捏泥巴,放八卦炉(后来这个成了太白金星的宝贝)
 * 中烤,于是就有了人:
 * 我们把这个生产人的过程用java程序表现出来:
 */
public class HumanFactory {
//定义一个烤箱,泥巴塞进去,人就出来了
    public static Human createHuman(Class c){
        Human human = null;
        try{
            human = (Human)Class.forName(c.getName()).newInstance();//产生一个人种
        }catch(InstantiationException e){
            System.out.println("必须指定人种的颜色");
        }catch(ClassNotFoundException e){
            System.out.println("混蛋,你指定的人种找不到!");
        } catch (IllegalAccessException e) {
            System.out.println("人种定义错误");
        }

        return human;
    }

}

NvWa.java

package No5_FactoryMethodPattern;

/**
 * 这是女娲
 */
public class NvWa {
    public static void main(String[] args) {
        System.out.println("-----造出的第一批人是这样的:白色人种-----");
        Human whiteHuman = HumanFactory.createHuman(WhiteHuman.class);
        whiteHuman.cry();
        whiteHuman.laugh();
        whiteHuman.talk();

        System.out.println("-----造出的第二批人是这样的:黑色人种-----");
        Human blackHuman = HumanFactory.createHuman(BlackHuman.class);
        blackHuman.cry();
        blackHuman.laugh();
        blackHuman.talk();

        System.out.println("-----造出的第三批人是这样的:黄色人种-----");
        Human yellowHuman = HumanFactory.createHuman(YellowHuman.class);
        yellowHuman.cry();
        yellowHuman.laugh();
        yellowHuman.talk();

    }
}

对代码的解读都写在注释中了,仔细阅读代码后往下看


定义(百度百科):

工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。


工厂方法经常用在以下两种情况中:

第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。


代码例子摘自《24种设计模式与6大设计原则》



猜你喜欢

转载自blog.csdn.net/qq_26458903/article/details/80002652