工厂模式

作者: 降龙_伏虎 | 来源:发表于2019-06-19 10:31 被阅读0次

    1.简单工厂模式

    简单工厂模式(Smple Factory Pattern) 是指有一个工厂对象决定创建出哪一种产品的实例
    适用于工厂类创建实例对象较少的情况.调用时只需传入参数即可
    
    image.png
    /**
     * Description:水果接口
     *
     * @date 2019-04-26 11:27
     */
    
    public interface IFruits {
    
        /**
         * Description:获取水果名称
         * @Date  2019-04-26 11:28
         * @Param []
         * @return java.lang.String
        **/
    
        String getName();
    }
    
    /**
     * Description:苹果类
     *
     * @date 2019-04-26 11:29
     */
    
    public class Apple implements IFruits{
        public String getName() {
            return "苹果";
        }
    }
    
    /**
     * Description:水果工厂
     *
     * @date 2019-04-26 11:30
     */
    
    public class FruitsFactory {
    
        public static IFruits produce(Class type){
            IFruits fruits = null;
            try {
                fruits = (IFruits) Class.forName(type.getName()).newInstance();
            } catch (InstantiationException e) {
                System.out.println("抽象类或接口");
            } catch (IllegalAccessException e) {
                System.out.println("私有对象");
            } catch (ClassNotFoundException e) {
                System.out.println("类不存在");
            }
            return fruits;
        }
    
        //测试
        public static void main(String[] args) {
            IFruits fruits = FruitsFactory.produce(com.sky.designpattern.simplefactory.Apple.class);
            System.out.println(fruits == null?"":fruits.getName());
        }
    }
    

    2.工厂方法模式

    工厂方法模式(Factory Method Pattern) 是指定一个创建对象的接口
    但实际上对象的创建过程由接口的实现类负责,将类的实例化推迟到实现类中
    
    image.png
    /**
     * Description:水果接口
     *
     * @date 2019-04-26 11:27
     */
    
    public interface IFruits {
    
        /**
         * Description:获取水果名称
         * @Date  2019-04-26 11:28
         * @Param []
         * @return java.lang.String
        **/
    
        String getName();
    }
    
    /**
     * Description:苹果类
     *
     * @date 2019-04-26 11:29
     */
    
    public class Apple implements IFruits{
        public String getName() {
            return "苹果";
        }
    }
    
    /**
     * Description:香蕉类
     *
     * @date 2019-04-26 11:29
     */
    
    public class Banana implements IFruits{
        public String getName() {
            return "香蕉";
        }
    }
    
    /**
     * Description:水果工厂接口
     *
     * @date 2019-04-26 11:30
     */
    
    public interface IFruitsFactory {
    
          IFruits produce();
    }
    
    /**
     * Description:苹果工厂
     *
     * @date 2019-04-26 11:48
     */
    public class AppleFactory implements IFruitsFactory {
        @Override
        public IFruits produce() {
            return new Apple();
        }
    }
    
    
    /**
     * Description:香蕉工厂
     *
     * @date 2019-04-26 11:48
     */
    
    public class BananaFactory implements IFruitsFactory {
        @Override
        public IFruits produce() {
            return new Banana();
        }
    }
    

    实际使用中工厂可采用spring注入,返回结果可采用泛型

    /**
     * Description:水果工厂接口
     *
     * @date 2019-04-26 11:30
     */
    
    public interface IFruitsFactory<T extends IFruits> {
    
          T produce();
    }
    /**
     * Description:苹果工厂
     *
     * @date 2019-04-26 11:48
     */
    public class AppleFactory implements IFruitsFactory {
        @Override
        public Apple produce() {
            return new Apple();
        }
    }
    /**
     * Description:香蕉工厂
     *
     * @date 2019-04-26 11:48
     */
    
    public class BananaFactory implements IFruitsFactory {
        @Override
        public Banana produce() {
            return new Banana();
        }
    }
    

    3.抽象工厂模式

    image.png
    /**
     * Description:水果接口
     *
     * @date 2019-04-26 14:21
     */
    
    public interface IFruits {
    
        String getName();
        String getBrand();
    }
    
    /**
     * Description:红富士苹果类
     *
     * @date 2019-04-26 14:23
     */
    
    public class HongFushiApple implements IFruits{
        @Override
        public String getName() {
            return "苹果";
        }
    
        @Override
        public String getBrand() {
            return "红富士";
        }
    }
    /**
     * Description:红富士香蕉类
     *
     * @date 2019-04-26 14:23
     */
    
    public class HongFushiBanana implements IFruits{
        @Override
        public String getName() {
            return "香蕉";
        }
    
        @Override
        public String getBrand() {
            return "红富士";
        }
    }
    
    /**
     * Description:黄元帅苹果类
     *
     * @date 2019-04-26 14:23
     */
    
    public class HuangYuanShuaiApple implements IFruits{
        @Override
        public String getName() {
            return "苹果";
        }
    
        @Override
        public String getBrand() {
            return "黄元帅";
        }
    }
    
    /**
     * Description:黄元帅香蕉类
     *
     * @date 2019-04-26 14:23
     */
    
    public class HuangYuanShuaiBanana implements IFruits{
        @Override
        public String getName() {
            return "香蕉";
        }
    
        @Override
        public String getBrand() {
            return "黄元帅";
        }
    }
    
    /**
     * Description:红富士水果工厂
     *
     * @date 2019-04-26 14:16
     */
    
    public class HongFuShiFactory implements IFruitsFactory {
        @Override
        public IFruits produceApple() {
            return new HongFushiApple();
        }
    
        @Override
        public IFruits produceBanana() {
            return new HuangYuanShuaiBanana();
        }
    }
    
    /**
     * Description:黄元帅水果工厂
     *
     * @date 2019-04-26 14:16
     */
    
    public class HuangYuanShuaiFactory implements IFruitsFactory {
        @Override
        public IFruits produceApple() {
            return new HuangYuanShuaiApple();
        }
    
        @Override
        public IFruits produceBanana() {
            return new HongFushiBanana();
        }
    }
    

    相关文章

      网友评论

        本文标题:工厂模式

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