美文网首页
工厂模式

工厂模式

作者: yl1415 | 来源:发表于2017-04-23 11:37 被阅读0次

    背景

    工厂模式,顾名思义,就是生产对象的一种方式。传统使用new的方法有一些弊端:耦合问题,构造参数太多后不便等。

    下面我们从一个示范,来看看使用new会遇到哪些问题。

    public interface Pizza {
        void prepare();
        void bake();
        void cut();
        void box();
    }
    
    public class CheesePizza implements Pizza {
        public void prepare() {}
        public void bake() {}
        public void cut() {}
        public void box() {}
    }
    
        Pizza orderPizza(String type) throws Exception {
            Pizza pizza;
            // 当增加/删除特定类型的pizza时, 这里的代码会频繁改动
            if (type.equals("cheese")) {
                pizza = new CheesePizza();
            } else if (type.equals("greek")) {
                pizza = new GreekPizza();
            } else {
                throw new Exception("no type pizza. type=" + type);
            }
            // 下面的部分代码不会改变
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }
    

    将频繁改动的代码封装起来

    public class SimplePizzaFactory {
        public Pizza createPizza(String type) throws Exception {
            Pizza pizza;
            // 当增加/删除特定类型的pizza时, 这里的代码会频繁改动
            if (type.equals("cheese")) {
                pizza = new CheesePizza();
            } else if (type.equals("greek")) {
                pizza = new GreekPizza();
            } else {
                throw new Exception("no type pizza. type=" + type);
            }
            return pizza;
        }
    }
    

    以上封装有几点说明如下:

    • 以后关于创建对象的改动都只需改动这一处代码,方便管理
    • 创建对象的方法也可以定义为一个静态方法,常被称为静态工厂。但这样一来,就不能够通过继承来改变创建方法的行为。

    工厂模式定义

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

    工厂模式类图如下:todo

    相关文章

      网友评论

          本文标题:工厂模式

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