Java设计模式从精通到入门四 简单工厂方法模式

Posted krloypower

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式从精通到入门四 简单工厂方法模式相关的知识,希望对你有一定的参考价值。

简单工厂方法模式

属于23中设计模式中创建型类型。

核心思想:工厂提供创建对象的接口,由子类决定实例化哪一个子类。

来源

? 设计模式之禅中的例子,女娲造人,通过八卦炉来进行造人,没有烧熟的为白人,烧太熟的为黑人,刚好的为黄种人的例子进行程序展示
女娲作为client,八卦炉为工厂类,人类为具体实现类,有皮肤的区别。

UML类图

技术分享图片

图一

Factory: 工厂类的接口,根据类类型,提供只能创建Human子类,或者子孙类的方法。
HumanFactory: 工厂类的具体实现,通过反射获取该对象。
Human: 提供获取人类皮肤的接口。
WhiteHuman: Human的具体实现类
BlackHuman: Human的具体实现类
YellowHuman: Human的具体实现类

核心代码

Factory类:

public interface Factory {
    /**
     * @Author ouyangkang
     * @Description 提供返回人类比较具体的实例
     * @Date 10:04 2019/1/11
     * @param c
     * @return T
    **/
    <T extends Human> T getInstance(Class< ? extends Human> c);
}

HumanFactory类:

public class HumanFactory implements Factory {

    /**
     * @Author ouyangkang
     * @Description 实现
     * @Date 10:05 2019/1/11
     * @param c
     * @return T
    **/
    @Override
    public <T extends Human> T getInstance(Class<? extends Human> c) {
        if (c != null){
            try {
                return (T) c.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Human类:

public interface Human {
    /**
     * @Author ouyangkang
     * @Description 获取人类皮肤颜色
     * @Date 10:05 2019/1/11
     * @param
     * @return void
    **/
    void getColor();
}

WhiteHuman类:

public class WhiteHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("白色人种");
    }
}

BlackHuman类:

public class BlackHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黑色人种");
    }
}

YellowHuman类

public class YellowHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("黄色人种");
    }
}

Client类

public class Client {
    public static void main(String[] args) {
        Factory factory = new HumanFactory();
        Human instance = factory.getInstance(WhiteHuman.class);
        instance.getColor();
        factory.getInstance(BlackHuman.class).getColor();
        factory.getInstance(YellowHuman.class).getColor();
    }
}

输出结果:

白色人种
黑色人种
黄色人种

总结

? 简单工厂方法是一个非常常见的设计模式。Spring中有他的影子。它属于创建型模式,工厂父类提供创建产品对象的接口,具体的工厂类实现该接口,并创建相应的对象。这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

以上是关于Java设计模式从精通到入门四 简单工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

Spring 从入门到精通系列 02——程序的耦合问题及工厂模式解耦

SpringBatch从入门到精通-3-并行处理

Java 工厂方法模式的简单示例

java 工厂方法模式简单实例

Java之Spring AOP入门到精通IDEA版(一篇文章精通系列)

牛逼!Java 从入门到精通,超全汇总版