zoukankan      html  css  js  c++  java
  • 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中有他的影子。它属于创建型模式,工厂父类提供创建产品对象的接口,具体的工厂类实现该接口,并创建相应的对象。这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

  • 相关阅读:
    GKB版本与UTF-8版本有什么区别(转载)
    如何与项目开发方对接
    php查询数据集的几种方式(mysql_unbuffered_query()与mysql_query()的区别)
    怎么去执行文件读写 ?
    Python中(集合、元祖、字典)等词汇基本语法
    Python入门~list 相关语法
    Python入门-基础语法实践
    newman + postman 环境搭建
    萌新驾到,请多多关照!
    切片、非空即真
  • 原文地址:https://www.cnblogs.com/Krloypower/p/10268302.html
Copyright © 2011-2022 走看看