1.为啥要去工厂搞斧头?
最开始人类需要斧头,得自己磨石头,自己造,也就是我们最开始玩的new对象的方式,其实我们只想用斧头,不想关心它是怎么造的,后来有了工厂的方式,我们只需和工厂说下需要什么斧头,工厂就帮我们搞出来了。然而最高的境界是我们需要斧头,有服务人员自动送到你手上,可能这就是spring的核心依赖注入吧,磕得打住,这篇博文只唠简单工厂模式,所以主要特点就是为了省事。
2.工厂是如何按你的要求把斧头造出来,交给你?
--2.1提供了制造斧头的接口(这个网上叫做抽象产品):
//实现制造斧头的接口
public interface Axe {
//制造
public void make();
}
--2.2加入制造斧头的材料,最终通过实现造斧头的接口来造出一把斧头(这个网上叫做具体产品):
public class SteelAxe implements Axe{
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("制造出来了钢斧!");
}
}
public class StoneAxe implements Axe{
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("制造出来了石斧!");
}
}
public class WoodenAxe implements Axe{
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("制造出来了木斧!");
}
}
上面就把各种斧头都实现了,我的要求是:”工厂给我提供一个我需要类型的斧头“。所以就需要实现工厂类了。
--2.3如何根据需要,提供一把斧头:
public class AxeFactory {
public static Axe makeAxe(String axeName){
Axe axe=null;
switch(axeName){
case "钢斧":
axe=new SteelAxe();
break;
case "石斧":
axe=new StoneAxe();
break;
case "木斧":
axe=new WoodenAxe();
break;
}
return axe;
}
}
这样就可以由我输入需要的什么类型的斧头,工厂给我返回需要的斧头。
--2.4这工厂到底靠谱不,测试类:
public class AxeTest {
public static void main(String[] args) {
Axe axe=AxeFactory.makeAxe("木斧");
axe.make();
}
}
打印结果:
制造出来了木斧!
3.这种简单工厂模式好不好啊?
--3.1好处:
简单工厂模式的好处是逻辑判断都实现在了工厂类中,可以根据用户的选择条件,动态的实例化需要的类,并且对于用户来说,它和工厂类没什么依赖,就是一个斧头关系,其他制造啥的与用户无关。
--3.2坏处:
简单工厂模式的效率不高啊,如果用户需要一把金斧,除了Axe接口不改,剩下的都要大改,总的来说就是不利于扩展,扩展性差,
其实就是违反了开-闭原则(对扩展开放,对修改封闭)。而此时需要金斧就得对修改开放。
----------------------------------------------
如果有的地方比喻不恰当,请看友指出。