zoukankan      html  css  js  c++  java
  • java模式-工厂模式

    今天在学习工厂模式,从最简单的简单工厂模式开始。

    我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product)。

    产品A:

    public class A implements Product {
    
        public A() {
            System.err.println("生产了产品A");
        }
    
    }

    产品B:

    public class B implements Product {
    
        public B() {
            System.err.println("生产了产品B");
        }
    
    }

    A,B实现的接口Product:

    public interface Product {
    
    }

    接下来就是我们用来实例化A,B的工厂类:

    public class Factory {
        public Product create(int i) throws Exception {
            switch (i) {
            case 1:
                return new A();
            case 2:
                return new B();
            default:
                throw new Exception("没有该产品。");
            }
        }
        
        public static void main(String[] args) throws Exception {
            Factory f=new Factory();
            f.create(1);
            f.create(2);
            f.create(3);
        }
    }

    简单工厂中只有一个工厂,这个工厂可以接收参数,并根据参数来决定返回什么样的实体。所有创建的工作都由该工厂完成。

    简单工厂有一个不方便的地方在于,当我们需要需要新增一种产品,比如产品C,这时候我们不仅需要新建C的实体类,还需要修改工厂类的方法。如果需要生产的产品足够多,我们工厂类则会显得十分复杂,各种判断。

    这时候我们就思考了,可不可以让一个工厂只生产一种产品呢,这样工厂类内部就简单了。

    如下,我们先定义一个借口Product,所有可以生产产品的工厂类都要实现这个接口。

    /**
     * <p>
     * 
     * 工厂类接口
     *       </p>
     *
     * @author wangchao
     *
     * @version 1.0.0
     *
     * @since 1.0.0
     *
     */
    public interface FactoryInterface {
        //创建方法
        public Product create();
    }

    实现了这个接口的工厂:

    /**
     * <p>
     * 工厂A,专门负责生产A类产品
     * </p>
     *
     * @author wangchao
     *
     * @version 1.0.0
     *
     * @since 1.0.0
     *
     */
    public class FactoryA implements FactoryInterface {
    
        @Override
        public Product create() {return new A();
        }
    
    }
    /**
     * <p>
     * 工厂B,专门负责生产B类产品
     * </p>
     *
     * @author wangchao
     *
     * @version 1.0.0
     *
     * @since 1.0.0
     *
     */
    public class FactoryB implements FactoryInterface {
    
        public Product create() {
            return new B();
        }
    
    }

    这样的话,每一个工厂的实现就非常简单了。但是这样还是有一个问题,我们需要为为一个产品创建一个工厂,如果我们的产品足够多,我们就得创建足够的工厂,这样肯定不是我们想要的。

    我们需要一个更加抽象的工厂,来实现有共同属性的产品的生产。

    比如,现在我们现在对A产品要生产两个型号:A-1、A-2,B产品也需要生产两个型号:B-1、B-2。如果按照上面的工厂方法,我们需要写四个

  • 相关阅读:
    C++ Primer注意事项11_运算符重载_算术/关系运算符_下标运算符
    android最新的工具DateHelper
    ssh否password登陆server
    atitit.设计模式(2) -----查询方式/ command 总结
    采用Eclipse中间Maven构建Web项目错误(一)
    dm8148 jpeg编解码器测试
    C++ 结构体和类的区别
    C++ const
    C++中的inline函数
    C++ 模板类demo
  • 原文地址:https://www.cnblogs.com/wangchaoBlog/p/6138162.html
Copyright © 2011-2022 走看看