设计模式——工厂模式,做个笔记

今天来学习一下工厂模式,学习了鸿洋的卖肉夹馍,自己写了下,做个记录。

简单工厂模式

//肉夹馍

public abstract class RouJiaMo {
public String type;
//准备材料
public void prepare(){
System.out.println(type+"正在准备中……");
}
//生火
public void fire(){
System.out.println(type+"出锅中……");
}
//打包
public void packag(){
System.out.println(type+"打包出售……");
}
}

//辣味肉夹馍

public class LaRouJiaMo extends RouJiaMo{

public LaRouJiaMo(){
this.type = "辣味肉夹馍";
}
}

//酸味肉夹馍

public class SuanRouJiaMo extends RouJiaMo{

public SuanRouJiaMo(){
this.type = "酸味肉夹馍";
}
}

//甜味肉夹馍

public class TianRouJiaMo extends RouJiaMo {

public TianRouJiaMo (){
this.type = "甜味肉夹馍";
}
}

//工厂

public class SimpleRouJiaMoFactory {
private RouJiaMo rouJiaMo;

public RouJiaMo creatRouJiaMo(String type){
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}
return rouJiaMo;
}
}

//肉夹馍店

public  class RouJiaMoStore {
private RouJiaMo rouJiaMo;
private SimpleRouJiaMoFactory factory;

public RouJiaMoStore(SimpleRouJiaMoFactory factory){
this.factory = factory;
}

public RouJiaMo sellJiaMo(String type){
rouJiaMo = factory.creatRouJiaMo(type);

rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();
return rouJiaMo;
}
}

工厂方法模式

public abstract class RouJiaMoStore {
private RouJiaMo rouJiaMo;

//抽象一个私有对象,将创建肉夹馍的方法放在子类中执行,工厂方法模式,把实例化过程放到子类中
public abstract RouJiaMo creatRouJiaMo(String type); //私有方法不可抽象

public RouJiaMo sellJiaMo(String type){

rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();

return rouJiaMo;
}
}

//北京店继承总店

public class BeiJingRouJiaMoStore extends RouJiaMoStore {
private RouJiaMo rouJiaMo;
//在这里你可以定义自己的肉夹馍店
@Override
public RouJiaMo creatRouJiaMo(String type) {
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("suantian")) {//北京店特有酸甜味

}
return rouJiaMo;
}
}

//调用

BeiJingRouJiaMoStore beiJingRouJiaMoStore = new BeiJingRouJiaMoStore();
beiJingRouJiaMoStore.sellJiaMo("suan");//卖肉夹馍


工厂方法模式就是让肉夹馍商店只负责肉夹馍的产生,把肉夹膜的实例放到子类进行。这样耦合度再次降低。

这只是最简单的工厂模式,感觉不过瘾看看鸿洋大神的

http://blog.youkuaiyun.com/lmj623565791/article/details/24460585




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值