设计模式:简单工厂模式

 

目录

 

简介

代码示例:

visio图

优缺点及使用场景


简介

简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。其可以使调用方不用关注对象的构造过程,直接在工厂中提取需要的依赖对象,可以把调用方和对象构造进行解耦。

 

代码示例:

定义pizza抽象类

public abstract class Pizza {
	public abstract void prepare();

	public abstract void bake();

	public abstract void cut();

	public abstract void box();
}

实现类:

public class CheesePizza extends Pizza{

	@Override
	public void bake() {
		System.out.println("bake "+this.getClass().getSimpleName()+" ...");
	}

	@Override
	public void box() {
		System.out.println("box "+this.getClass().getSimpleName()+" ...");
	}

	@Override
	public void cut() {
		System.out.println("cut "+this.getClass().getSimpleName()+" ...");
	}

	@Override
	public void prepare() {
		System.out.println("prepare "+this.getClass().getSimpleName()+" ...");
	}

 }

pizza工厂

/**
 * 专门用于创建披萨的工厂类
 * @author Mr.Li
 *
 */
public class SimplePizzaFactory {
	public Pizza createPizza(String type) {
		Pizza pizza = null;

		if (type.equals("cheese")) {
			pizza = new CheesePizza();
		} else if (type.equals("clam")) {
			pizza = new ClamPizza();
		} else if (type.equals("pepperoni")) {
			pizza = new PepperoniPizza();
		} else if (type.equals("veggie")) {
			pizza = new VeggiePizze();
		}

		return pizza;
	}
}

pizza商店:

public class PizzaStore {
	private SimplePizzaFactory factory; // SimplePizzaFactory的引用

	public PizzaStore(SimplePizzaFactory factory) {
		this.factory = factory;
	}

	public Pizza orderPizza(String type) {
		Pizza pizza;
		pizza = factory.createPizza(type); // 使用工厂对象的创建方法,而不是直接new。这里不再使用具体实例化

		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
	}
 }

 

调用:

public static void main(String[] args) {
		PizzaStore pizzaStore = new PizzaStore(new SimplePizzaFactory());
		pizzaStore.orderPizza("cheese");
		System.out.println("---------------------");
		pizzaStore.orderPizza("clam");
		System.out.println("---------------------");
		pizzaStore.orderPizza("pepperoni");
		System.out.println("---------------------");
		pizzaStore.orderPizza("veggie");
	}

结果打印:

prepare CheesePizza ...
bake CheesePizza ...
cut CheesePizza ...
box CheesePizza ...
---------------------
prepare ClamPizza ...
bake ClamPizza ...
cut ClamPizza ...
box ClamPizza ...
---------------------
prepare PepperoniPizza ...
bake PepperoniPizza ...
cut PepperoniPizza ...
box PepperoniPizza ...
---------------------
prepare VeggiePizze ...
bake VeggiePizze ...
cut VeggiePizze ...
box VeggiePizze ...

 

visio图

优缺点及使用场景

	/**
	 * 优点:	1、简单工厂模式实现了对责任的分割,提供了专门的工厂类用于创建对象。
	 * 		2、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
	 * 		3、通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
	 * 缺点:	1、由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
	 * 		2、使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度
	 * 		3、系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
	 * 		4、简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
	 * 使用场景:	1、  工厂类负责创建的对象比较少。
	 * 			2、  客户端只知道传入工厂类的参数,对于如何创建对象不关心。
	 * 
	 */

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值