您的位置:首页 > 其它

简单工厂模式

2015-07-08 10:34 260 查看
文章是看了网上《设计模式之禅》第二版的,和网上其他文章写出来的。

简单工厂模式的类图:



抽象产品类

可以是抽象类 可以是接口,主要看需求是用接口 还是用抽象类。

因为我们重点制造出不同肤色的人,所以我们需要一个接口或者抽象类来被他们实现或者继承。

Human(抽象产品类) 可以是接口或者抽象类

[code]//Human.java
public interface Human {
    void getColor();
    void talk();
}


具体产品类

具体产品类这里是黑人,黄种人,白种人。代码实现如下:

[code]//BlackHuman.java
public class BlackHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("黑种人黑色皮肤");
    }

    @Override
    public void talk() {
        System.out.println("说的是单字节语言");
    }
}


[code]//YellowHuman.java
public class YellowHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("黄种人***皮肤");
    }
    @Override
    public void talk() {
        System.out.println("黄种人说的是双字节语言");
    }
}


[code]//WhiteHuman.java
public class WhiteHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("白人是白色皮肤");
    }
    @Override
    public void talk() {
        System.out.println("白人说的是单字节语言");
    }
}


工厂类

负责生成产品对象的。在这里,工厂类是HumanFactory,这里用到了静态方法生产产品,确切来说,这是一个 简单静态工厂模式。

简单工厂模式是通过 switch case (或者if elseif)来写分支的。这就是工厂模式的最大区别之处。

[code]//HumanFactory.java
public class HumanFactory {
    public static Human createHuman(int type){
        Human human = null;
        switch (type) {
        case 1:
            human = new WhiteHuman();
            break;
        case 2:
            human = new BlackHuman();
            break;
        case 3:
            human = new YellowHuman();
            break;
        }
        return human;
    }
}


客户

这里客户是女娲.

[code]public class Nvwa {
    public static void main(String[] args) {
        System.out.println("--早出的第一批人是白色人种--");
        Human whiteHuman = HumanFactory.createHuman(1);
        whiteHuman.getColor();
        whiteHuman.talk();

        System.out.println("--第二次 是黑色人种--");
        Human blackHuman = HumanFactory.createHuman(2);
        blackHuman.getColor();
        blackHuman.talk();

        System.out.println("--最后 是***人种--");
        Human yellowHuman = HumanFactory.createHuman(3);
        yellowHuman.getColor();
        yellowHuman.talk();

    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: