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();
        }
    }
    
  • 相关阅读:
    Beta冲刺 第二天
    Beta冲刺 第一天
    实验十一 团队项目设计完善&编码测试
    实验十 软件系统详细设计与概要设计的改进
    实验九 FBG 团队项目需求改进与系统设计
    实验八 <FBG> 基于原型的团队项目需求调研与分析
    实验七 《FBG》—-小学生课后习题答案原型设计
    实验五 <FBG>团队亮相
    Windows zip版本安装MySQL
    redis安装与简单实用
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10163652.html
Copyright © 2011-2022 走看看