工厂模式(未完)

引题(故事)

女娲造人:从前有个女娲(又是从前),她造人,先在脑子里想了想,人是什么样子的呢?哦,有鼻子,眼睛,会说话,会会行动,皮肤还有颜色.有个这个概念模型之后,开始捏人,然后放到炉子里烤,一开始没经验,还没烧够时间,就取出来了,于是就成了白人;第二次想着多烧一会吧,烧过了,于是取出来就成了黑人(haha);第三次把握住时间火候了,然后出来的都是黄种人.
分析:从这个故事可以看到有女娲,三种人(白人,黑人,黄种人),还有炉子这5个实体.在女娲造人之前还想了想,这就是程序中的概念模型,使用接口来定义一个模型;炉子可以造很多不同的人,那这个炉子就是工厂.

代码实现

表示人类的接口Human.java

public interface Human {
    public void getColor();
    public void talk();
}

再定义三种人的模板,实现这个接口

public class WhiteHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("白人的皮肤是白色的");
    }

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

}
public class YellowHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黄人皮肤是黄色的");
    }

    @Override
    public void talk() {
        System.out.println("黄人说话一般是两个字节");
    }

}
public class BlackHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黑人的皮肤是黑色的");
    }

    @Override
    public void talk() {
        System.out.println("黑人说的话听不懂");
    }

}

然后定义一个工厂来生产这些人(抽象工厂)
AbstractFactory .java

public abstract class AbstractFactory {
    public abstract <T extends Human> T createFactory(Class<T> c);
}

使用工厂来继承这个抽象工厂
Factory.java

public class Factory extends AbstractFactory {

    @Override
    public <T extends Human> T createFactory(Class<T> c) {
        Human human=null;
        try {
            human=(Human) c.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T) human;
    }

}

最后女娲开始造人
NvWa.java

public class NvWa {
    public static void main(String[] args) {
        WhiteHuman whiteHuman=new Factory().createFactory(WhiteHuman.class);
        whiteHuman.getColor();
        whiteHuman.talk();

        BlackHuman blackHuman=new Factory().createFactory(BlackHuman.class);
        blackHuman.getColor();
        blackHuman.talk();

        YellowHuman yellowHuman=new Factory().createFactory(YellowHuman.class);
        yellowHuman.getColor();
        blackHuman.talk();

        BrownHuman brownHuman=new Factory().createFactory(BrownHuman.class);
        brownHuman.getColor();
        brownHuman.talk();
    }
}

结果

白人的皮肤是白色的
白人说的话一般是一个字节
黑人的皮肤是黑色的
黑人说的话听不懂
黄人皮肤是黄色的
黑人说的话听不懂
棕色人种皮肤是棕色的
棕色人说的啥我也听不懂

鄙人讲解不通俗,后期理解更深入后继续补充……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值