【学习笔记】创建模式之工厂方法模式

工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂方法让类把实例化推延到了子类。

举个例子

//菜色
public interface Food {
	void display();
}
//一个菜色
public class Tofu implements Food{
	@Override
	public void display() {
		System.out.println("这是炸豆腐");
	}
}
//招牌菜,每当顾客要求做厨师长不会的菜时,这盘菜上去,总能满足顾客要求
public class Beef implements Food{
	@Override
	public void display() {
		System.out.println("这是炒牛肉");
	}
}
//餐厅前台
public class Restaurant {
	private Food food;
	//根据客人要求上对应的菜
	//但是前台只负责传递上菜需求与上菜
	//做菜由后厨负责
	public Food servedFood(String type){
		food = SimpleFactory.getFood(type);
		return food;
	}
}

//餐厅后厨
public class SimpleFactory {
	//后厨判断是否能做客户要求的菜,能则做
	//不能则做招牌菜(就是这么任性)
	public static Food getFood(String type){
		if(type.equalsIgnoreCase("doufu")){
			return new Tofu();
		}else {
			return new Beef();
		}
	}
}

public class Main {
	public static void main(String[] args) {
		//顾客来到一家餐厅
		Restaurant r = new Restaurant();
		//要了一份炸豆腐,服务员传达了点餐,不一会儿就上菜了
		Food f = r.servedFood("doufu");
		//顾客发现确实是点的炸豆腐
		f.display();
	}
}

UML类图
在这里插入图片描述
在这种设计下,后厨无论加什么菜,前台都无需修改。但是同样明显的缺陷是,每当添加一个菜色,在后厨都得增加一个判断是否能做这道菜。这个就是简单工厂模式。

虽然对简单工厂有了大概了解,但是其中的简单工厂与工厂方法之间的区别尚不清晰。

参考文档
设计模式(四):工厂方法模式(解析设计原则)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值