zoukankan      html  css  js  c++  java
  • 工厂模式【构建模式】

    工厂模式

    Define an interface for creating object, but let subclass decide which to instantiate.
    Factory method lets a class defer instantiation to subclass.
    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到子类。
    

    反射工厂

    @Slf4j
    public class ReflectFactory {
        /**
         *  简单的反射工厂类
         *
         * created by ZXD at 23 Dec 2018 T 11:03:42
         * @param clz
         * @return
         */
        public static final <T> T create(Class<T> clz) {
            try {
                return clz.getDeclaredConstructor().newInstance();
            } catch (final Exception e) {
                log.error(clz.getName(), e);
                return null;
            }
        }
    }
    

    实例工厂

    • 将具体工厂类根据产品细化
    public class InstanceFactory {
    
        @Test
        public void all() {
            FruitFactory factory = new AppleFactory();
            Fruit fruit = factory.create();
            assertEquals("apple", fruit.name());
    
            factory = new BananaFactory();
            fruit = factory.create();
            assertEquals("banana", fruit.name());
    
            factory = new PearFactory();
            fruit = factory.create();
            assertEquals("pear", fruit.name());
        }
    }
    
    // 1)抽象产品类:定义产品的共性
    interface Fruit {
        String name();
    }
    
    // 2)工厂接口
    interface FruitFactory {
        Fruit create();
    }
    
    // 3)具体产品类:定义产品的特性
    class Apple implements Fruit {
        @Override
        public String name() {
            return "apple";
        }
    }
    
    class Banana implements Fruit {
        @Override
        public String name() {
            return "banana";
        }
    }
    
    class Pear implements Fruit {
        @Override
        public String name() {
            return "pear";
        }
    }
    
    // 4)具体的实例工厂类
    class AppleFactory implements FruitFactory {
        @Override
        public Apple create() {
            return new Apple();
        }
    }
    
    class BananaFactory implements FruitFactory {
        @Override
        public Banana create() {
            return new Banana();
        }
    }
    
    class PearFactory implements FruitFactory {
        @Override
        public Pear create() {
            return new Pear();
        }
    }
    
  • 相关阅读:
    因host命令导致无法正常SHUTDOWN的实验
    ORACLE SEQUENCE 介绍
    SQL Server数据库附加失败:错误5120和错误950
    Java中怎样由枚举常量的ordinal值获得枚举常量对象
    后会终无期,且行且珍惜
    Objective-C辛格尔顿
    自己动手写一个编译器Tiny语言解析器实现
    linux于test 订购具体解释
    Linux高性能server规划——处理池和线程池
    《采访中收集程序猿》学习记录8
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10163652.html
Copyright © 2011-2022 走看看