美文网首页
工厂方法设计模式

工厂方法设计模式

作者: one_mighty | 来源:发表于2018-01-26 11:41 被阅读0次

    一、UML

    工厂方法模式.png

    二、基本步骤

    2.1、工厂基本抽象类实现
    2.2、产品基本抽象类实现
    2.3、工厂业务实现
    2.4、产品业务实现
    2.5、工厂创建产品

    三、实现方式

    3.1、定义

    抽象工厂类

    /**
     * @author lizihanglove
     * @date 2018/1/15
     * @email one_mighty@163.com
     * @desc 工厂方法设计模式
     */
    
    public abstract class Factory {
    
        public abstract <T extends Product> T createProduct(Class<T> product);
    }
    

    具体工厂方法类

    
    /**
     * @author lizihanglove
     * @date 2018/1/15
     * @email one_mighty@163.com
     * @desc 具体工厂方法类
     */
    
    public class ConcreteFactory extends Factory {
        @Override
        public <T extends Product> T createProduct(Class<T> product) {
            T newInstance = null;
            try {
                newInstance = product.newInstance();
                return newInstance;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    

    产品抽象类

    /**
     * @author lizihanglove
     * @date 2018/1/15
     * @email one_mighty@163.com
     * @desc 产品抽象类
     */
    
    public abstract class Product {
    
        public abstract void print();
    }
    

    具体产品类A

    
    /**
     * @author lizihanglove
     * @date 2018/1/15
     * @email one_mighty@163.com
     * @desc 具体产品类A
     */
    
    public class ProductA extends Product {
        @Override
        public void print() {
            System.out.println(this.getClass().getCanonicalName());
        }
    }
    

    具体产品类B

    /**
     * @author lizihanglove
     * @date 2018/1/15
     * @email one_mighty@163.com
     * @desc 具体产品类B
     */
    
    public class ProductB extends Product {
        @Override
        public void print() {
            System.out.println(this.getClass().getCanonicalName());
        }
    }
    
    
    3.2、调用
    ConcreteFactory factory = new ConcreteFactory();
    ProductA productA = factory.createProduct(ProductA.class);
    productA.print();
    ProductB productB = factory.createProduct(ProductB.class);
    productB.print();
    
    3.3、结果
    System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductA
    System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductB
    

    相关文章

      网友评论

          本文标题:工厂方法设计模式

          本文链接:https://www.haomeiwen.com/subject/vcyroxtx.html