什么是工厂模式
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来, 达到提高灵活性的目的。
工厂模式分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
简单工厂模式
简单工厂模式又叫静态工厂方法模式。从命名上就可以看出这个模式一定很简单(都说简单了,还能怎样)。它存在的目的也很简单:定义一个用于创建对象的接口。
1、简单工厂模式的组成
- 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由 一个具体类实现。
- 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽 象类来实现。
- 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
2、场景模拟
华哥,一位爱好按摩的同事。刚毕业的时候收入没那么高,常出入于一些低消费的城中村按摩店。店里有15、16、17号三位技师坐在大堂等着华哥挑选,华哥抬手一指,点了15号技师。15号技师起身说:“先生您好,15号技师Tony老师为您服务!”,然后就带华哥去按摩房按摩去了。
那么这家城中村按摩店就是工厂,技师就是所有技师的统称,即抽象产品。15、16、17号技师就是具体产品角色。
3、代码演示
package DesignPattern.Factory.SimpleFactory;
//抽象产品角色(虽然考了130+的英语,但高考后我已经毫无保留的换给老师了)
public interface JiShi {
//按摩服务
public void anMo();
}
//具体技师(15号)
public class JiShi15 implements JiShi{
@Override
public void anMo() {
System.out.println("15号技师Tony老师为您服务!");
}
}
//具体技师(16号)
public class JiShi16 implements JiShi{
@Override
public void anMo() {
System.out.println("16号技师Jack老师为您服务!");
}
}
//具体技师(17号)
public class JiShi17 implements JiShi{
@Override
public void anMo() {
System.out.println("17号技师Mike老师为您服务!");
}
}
//工厂(城中村按摩店)
public class AnMoDian {
//挑选技师,返回类型为抽象的技师类
public static JiShi pickJiShi(String s){
if("15".equals(s)){
return new JiShi15();
}else if("16".equals(s)){
return new JiShi16();
}else if("17".equals(s)){
return new JiShi17();
}else{
//默认Tony老师接客啦
return new JiShi15();
}
}
}
店有了,技师有了,下面欢迎华哥出场...
//顾客(华哥)
public class Customer {
public static void main(String[] args) {
//去店里选技师
JiShi jishi = AnMoDian.pickJiShi("15");
//选到技师,开始按摩
jishi.anMo();//15号技师Tony老师为您服务!
}
}
4、总结
从开闭原则(对扩展开放;对修改封闭)上来分析下简单工厂模式。当按摩店新招一位技师的时候,只要提供相同的按摩服务,那么华哥去按摩店都能点了。所以对技师部分来说,它是符合开闭原则的;但是按摩店部分好像不太理想,因为每新招一位技师,都要在工厂类中增加相应的业务逻辑或者判断逻辑,这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。