简单工厂模式(java版)

来源:互联网 发布:网络流行语英语作文 编辑:程序博客网 时间:2024/05/01 20:06

1.为啥要去工厂搞斧头?

最开始人类需要斧头,得自己磨石头,自己造,也就是我们最开始玩的new对象的方式,其实我们只想用斧头,不想关心它是怎么造的,后来有了工厂的方式,我们只需和工厂说下需要什么斧头,工厂就帮我们搞出来了。然而最高的境界是我们需要斧头,有服务人员自动送到你手上,可能这就是spring的核心依赖注入吧,磕得打住,这篇博文只唠简单工厂模式,所以主要特点就是为了省事。

2.工厂是如何按你的要求把斧头造出来,交给你?

--2.1提供了制造斧头的接口(这个网上叫做抽象产品):

//实现制造斧头的接口public interface Axe {//制造        public void make();}

--2.2加入制造斧头的材料,最终通过实现造斧头的接口来造出一把斧头(这个网上叫做具体产品):

public class SteelAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.out.println("制造出来了钢斧!");}}public class StoneAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.out.println("制造出来了石斧!");}}public class WoodenAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.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接口不改,剩下的都要大改,总的来说就是不利于扩展,扩展性差,
其实就是违反了开-闭原则(对扩展开放,对修改封闭)。而此时需要金斧就得对修改开放。

----------------------------------------------

如果有的地方比喻不恰当,请看友指出。

0 0