工厂模式一一简单工厂(factory)

写在前面    

      首先要明白简单工厂,并不是23种设计模式的一种,它更应该归类到一种编程习惯之中,不论是抽象工厂,还是工厂方法都是比较成熟而且富有弹性的设计模式了,在这里谈简单工厂是为了引出那两个重磅级的设计模式。

 

简单工厂的作用

      工厂,一听就知道是用来制造东西的,而在程序里工厂是专门用来创建对象的,这点都不例外,说白了简单工厂模式,就是专门建立了一个类负责对象的创建,想要对象就去找工厂要就行了。

 

下面举个实例分析一下用不用工厂模式的区别

我们现在有个菜单(接口),有三个实现接口的类,分别是面条,米饭和饺子,模拟一位顾客去吃饭。

 

 类图如下

       

   

Java源程序如下

         

菜单类   

package simplefactory_06;

public interface Menu {
	public void getMeal();
}

 

面条类

package simplefactory_06;

public class Noodles implements Menu{

	public void getMeal() {
		System.out.println("面条");
	}

}

 

饺子类

package simplefactory_06;

public class Dumpling implements Menu{

	public void getMeal() {
		System.out.println("饺子");
	}

}

 

米饭类

package simplefactory_06;

public class Rice implements Menu{

	public void getMeal() {
		System.out.println("大米");
	}

}

 

客户端

package simplefactory_06;

public class Client {
	public static void main(String[] args) {
        	Menu m=new Noodles();
		m.getMeal();
		Menu m1=new Rice();
		m1.getMeal();
	}
}

 

下面引入简单工厂

 

类图

     

   

java源程序添加工厂类

package simplefactory_06;

public class FoodFactory {
	static Menu menu;
	public static Menu getFood(String food){//声明静态方法,用于创建所需对象并返回
		if(food.equals("rice"))
			menu=new Rice();
		else if(food.equals("noodles"))
			menu=new Noodles();
		else
			menu=new Dumpling();
		return menu;
	}
}

   

把客户端改为

package simplefactory_06;

public class Client {
	public static void main(String[] args) {
		Menu m=FoodFactory.getFood("");
		m.getMeal();
	}
}

 

对比分析

      引入简单工厂之后,客户端想要吃什么,就直接找工厂要对象,而不是自己创建对象,实质上也就是对创建对象进行了封装,其实我之前举外观模式的例子,类图和程序都跟这个例子很像,但是要区别也很容易,外观模式包装接口是为了简化接口,简单工厂是为了统一创建对象。

 

这样设计的优点

    1. 实现了客户端代码与具体实现的解耦
    2. 使用对象的时候直接获取,而不必了解对象是怎么创建和管理的
    3. 使职责分工更加明确,便于系统优化

 

缺点

    1. 由于工厂类集中了所有实例的创建逻辑,违反了高内聚低耦合的原则。
    2. 如果要添加新的饭就必须对工厂类进行修改,违反了开闭原则。

 

而创建简单工厂需要有几种角色

工厂类

包含了创建具体类的静态方法(FoodFactory)

抽象产品

简单工厂要返回的产品(menu)

具体产品

具体产品(rice noodles )

 

课后想一想

      如果我们的菜单要加入蛋炒饭类,需要更改哪些地方,会不会更改原有的类程序。

       下篇文章,我会把简单工厂稍作改进,使它变得容易扩展,这也就是大名鼎鼎的工厂方法模式

          传送门  :  https://blog.csdn.net/zhen921/article/details/82021274

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值