(三)简单工厂

简介

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

简单工厂

简单工厂算不上是一个设计模式,更趋向于是一种编程习惯,我们通过创建一个工厂类,来封装对对象的创建。

public class PizzaStore{
    public Pizza orderPizza(String type){
        Pizza pizza;
        //根据类型创建不同的披萨
        if(type.equals("cheese")){
            pizza = new CheesePizza();    
        }else if(type.equals("greek")){
            pizza = new GreekPizza();    
        }else if(type.equals("pepperoni")){
            pizza = new PepperoniPizza();
        }
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        return pizza;
    }
}

如上代码,我们可以根据传入的type来构造不同的对象,但是当我们需要去扩展的时候,不得不返回去修改原有的代码,故我们将创建对象的这段代码单独拎出来,构造一个新类专职去创建对象,我们称这个对象为“工厂”,如下所示

public class SimplePizzaFactory {
	public Pizza createPizza(String type) {
		Pizza pizza = null;

		if (type.equals("cheese")) {
			pizza = new CheesePizza();
		} else if (type.equals("pepperoni")) {
			pizza = new PepperoniPizza();
		} else if (type.equals("clam")) {
			pizza = new ClamPizza();
		} else if (type.equals("veggie")) {
			pizza = new VeggiePizza();
		}
		return pizza;
	}
}
public class PizzaStore {
	SimplePizzaFactory factory;
 
	public PizzaStore(SimplePizzaFactory factory) { 
		this.factory = factory;
	}
 
	public Pizza orderPizza(String type) {
		Pizza pizza;
 
		pizza = factory.createPizza(type);
 
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
	}

}

也许有人会问,这样做有什么好处,我们把创建对象的交给了工厂进行管理,其他对象如果需要对象时,也可以使用这个工厂来进行对象创建,通过我们将简单工厂里的方法设置为静态的方法

public static Pizza createPizza(String type)

我们在调用的时候,就可以简化代码,直接使用类调用静态方法。

public class PizzaStore {
	public Pizza orderPizza(String type) {
		Pizza pizza;
 
		pizza = SimplePizzaFactory.createPizza(type);
 
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
	}
}

使用静态方法也有缺点,如果有子类,则无法通过继承的方式来改变创建对象的方法。

类图

简单工厂类图

总结

简单工厂,通过创建工厂类来封装我们对对象的创建。

发布了17 篇原创文章 · 获赞 0 · 访问量 271
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览