• 设计模式


    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

    通俗解释:简单工厂,就是有一个专门生产某个产品的类。

    介绍

    • 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
    • 应用实例:
      1. 您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
      2. Hibernate 换数据库只需换方言和驱动就可以。
    • 优点:
      1. 一个调用者想创建一个对象,只要知道其名称就可以了。
      2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
      3. 屏蔽产品的具体实现,调用者只关心产品的接口。
    • 缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
    • 注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

    实现

    1. 创建一个动物接口
    package designPatterns.factory;
    
    /**
     * 动物接口
     * @author remainsu
     * @version 1.0 2019-06-12
     */
    public interface Animal {
    
        //一个声音的方法
        void voice();
    }
    
    2. 创建多个不同的动物的实现类
    package designPatterns.factory;
    
    /**
     * 动物接口的实现类:猫
     * @author remainsu
     * @version 1.0 2019-06-12
     */
    public class Cat implements Animal {
    
        /**
         * 重写Animal的voice()
         * @see designPatterns.factory.Animal#voice()
         */
        @Override
        public void voice() {
            System.out.println("This is the Cat Voice() !");
        }
    }
    
    package designPatterns.factory;
    
    public class Dog implements Animal {
    
        @Override
        public void voice() {
            System.out.println("This is the Dog Voice() !");
        }
    }
    
    package designPatterns.factory;
    
    public class Bird implements Animal {
    
        @Override
        public void voice() {
            System.out.println("This is the Bird Voice() !");
        }
    }
    
    3. 创建一个动物工厂,并提供创建动物的方法
    package designPatterns.factory;
    
    /**
     * 动物工厂
     * @author remainsu
     * @version 1.0 2019-06-12
     */
    public class AnimalFactory {
        
        /**
         * 创建动物类
         * @param type 动物类型
         * @return 动物类
         */
        public Animal getAnimal(String type) {
            
            // 根据传入的参数,创建不同的动物类
            if("cat".equals(type)) {
                return new Cat();
            } else if("dog".equals(type)) {
                return new Dog();
            } else if("bird".equals(type)) {
                return new Bird();
            } else {
                return null;
            }
        }
    }
    
    4. 使用该动物工厂,根据传递的参数,创建对应的动物
    package designPatterns.factory;
    
    /**
     * 动物工厂测试类
     * @author remainsu
     * @version 1.0 2019-06-12
     */
    public class Test {
    
        public static void main(String[] args) {
            
            AnimalFactory af = new AnimalFactory();
            
            Animal a1 = af.getAnimal("cat");
            Animal a2 = af.getAnimal("dog");
            Animal a3 = af.getAnimal("bird");
            
            a1.voice();
            a2.voice();
            a3.voice();
        }
    }
    

    输出结果:

    This is the Cat Voice() !
    This is the Dog Voice() !
    This is the Bird Voice() !
    
    参考
    1. https://www.runoob.com/design-pattern/factory-pattern.html
    2. https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247487170&idx=2&sn=34b135090c064c1ca202d629a4beab52&chksm=ebd631eedca1b8f85e444f7544c2cbe696b253fe3916f17dbcfbab49b6b74653126c230fdc39&scene=21#wechat_redirect
  • 相关阅读:
    C语言实现两栈空间共享
    MyEclipse里项目部署到tomcat上之后,tomcat webpps文件夹里为什么找不到这个项目
    CSS选择器
    用友2016成都校园招聘笔试题
    windows、ubuntu下eclipse搭建java、Python环境问题总结
    ubuntu上用eclipse搭建java、python开发环境
    windows 下用eclipse搭建java、python开发环境
    简单事件机制的研究
    软件测试(软件安装:php+mysql+apache+mantis过程遇到的问题以及解决方法)
    4、总结一下,以软件开发生命周期来说明测试的使用情况。
  • 原文地址:https://www.cnblogs.com/remainsu/p/she-ji-mo-shi--gong-chang-mo-shi.html
Copyright © 2020-2023  润新知