SSH中用到的设计模式之二——简单工厂
2014-10-26 19:13
190 查看
大家好,这一期主要介绍下很基础又很重要的简单工厂
对于工厂可能大家都很熟悉了,这是Java中最最经典的一个设计模式了。可以说,有了工厂,才有了Java。
简单的理解工厂,可以说工厂就是用来实例化类的,也可以说成是用来创建类的。
说白了,实际上,工厂就是中介,现在的中介软件也很多,打个简单的例子,美团外卖,大家平时都用对不对,他就能看成一个工厂,而订餐的人能看成是一个类的实例化对象,我们现在简称其为Student类,而各个使用美团外卖来上架其产品的商家我们称其为Shop类,当然
这只是一个接口而已,具体如何来看待各种商家,完全可以继承这个接口,这里就初略处理。好了,下面编写下我们的例子:
Student类:
Shop接口:
MeiTuanFactory类:
JapanShop类:
ChineseShop类:
仔细看了上面类结构的朋友们,可以明显的发现,工厂的好处,如果还没有的明白的,举一个简单的例子,我可以把ChineseShop或者JapanShop类在Student类里,但是如果多一个另外一个泰国Shop呢?我还去给Student类来修改吗?换一种说法,如果不是学生呢?是其他的人就不能使用美图外卖来订餐吗?那岂不是要修改其他的类上面的文件吗?而现在我用了工厂,仅仅需要在工厂里多加一个判断即可,这样以来,使得添加商家便的简便。
对于上面的这个例子,还可这样理解,你完全可以把Shop这个赋予在Student上面的字段,理解成为一种抽象的能力,我在这里有一个大胆的想法,恩,本来想以大脑分区来抽象出功能的,但是这个操作涉及到多个方面的协调合作,希望读到我文章的朋友能帮我想下吧,这里暂时放下。可能光用工厂来创建还是太肤浅,还需要用到更多的知识。这里的例子先这样理解这吧。以后这个例子还是会继续写全面的
下面总结下简单工厂的优势:
让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做响应的修改。
对于工厂可能大家都很熟悉了,这是Java中最最经典的一个设计模式了。可以说,有了工厂,才有了Java。
简单的理解工厂,可以说工厂就是用来实例化类的,也可以说成是用来创建类的。
说白了,实际上,工厂就是中介,现在的中介软件也很多,打个简单的例子,美团外卖,大家平时都用对不对,他就能看成一个工厂,而订餐的人能看成是一个类的实例化对象,我们现在简称其为Student类,而各个使用美团外卖来上架其产品的商家我们称其为Shop类,当然
这只是一个接口而已,具体如何来看待各种商家,完全可以继承这个接口,这里就初略处理。好了,下面编写下我们的例子:
Student类:
public class Student { private Shop shop; //这个属性就是说每一个学生默认都会可能是有一个订餐的功能 public Student(Shop shop) { this.shop = shop; }//构造方法 public void print() { System.out.println(shop.Print()); }//打印方法,用于实现一个打印,证明创建成功 }
Shop接口:
public interface Shop { String name ="外卖店";//固有字段 public String Print();//打印方法抽象 }
MeiTuanFactory类:
public class MeiTuanFactory {//此工厂针对于不同的学生需求,生成一个不同的实例Shop public Shop getShop(int id) { if(id==1) { return new ChineseShop(); } else { return new JapanShop(); } } }
JapanShop类:
public class JapanShop implements Shop { public String Print() { String JapanShop = "日本食物" + name ; return JapanShop; } }
ChineseShop类:
public class ChineseShop implements Shop { public String Print() { String ChineseShop = "中国食物" + name ; return ChineseShop; } }
仔细看了上面类结构的朋友们,可以明显的发现,工厂的好处,如果还没有的明白的,举一个简单的例子,我可以把ChineseShop或者JapanShop类在Student类里,但是如果多一个另外一个泰国Shop呢?我还去给Student类来修改吗?换一种说法,如果不是学生呢?是其他的人就不能使用美图外卖来订餐吗?那岂不是要修改其他的类上面的文件吗?而现在我用了工厂,仅仅需要在工厂里多加一个判断即可,这样以来,使得添加商家便的简便。
对于上面的这个例子,还可这样理解,你完全可以把Shop这个赋予在Student上面的字段,理解成为一种抽象的能力,我在这里有一个大胆的想法,恩,本来想以大脑分区来抽象出功能的,但是这个操作涉及到多个方面的协调合作,希望读到我文章的朋友能帮我想下吧,这里暂时放下。可能光用工厂来创建还是太肤浅,还需要用到更多的知识。这里的例子先这样理解这吧。以后这个例子还是会继续写全面的
下面总结下简单工厂的优势:
让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做响应的修改。
相关文章推荐
- 设计模式培训之二:简单工厂、工厂方法
- 简单的计算器程序可以用到简单工厂的设计模式
- SSH中用到的设计模式之三——工厂方法和抽象工厂
- 设计模式之二 简单工厂
- 设计模式之二简单工厂
- 设计模式之二:简单工厂模式—集中式工厂的实现
- 设计模式培训之二:简单工厂、工厂方法
- C#设计模式之简单工厂
- C#设计模式之简单工厂篇
- [导入]C#设计模式之简单工厂篇
- C#设计模式之简单工厂篇
- 设计模式之-简单工厂、工厂方法、抽象工厂
- C#设计模式之简单工厂篇
- Dot Net 设计模式—简单工厂
- 设计模式 之 简单工厂
- 用 Delphi 学设计模式 之 简单工厂篇- -
- C#设计模式之简单工厂篇
- 设计模式之Factory1(简单工厂,工厂方法,抽象工厂的比较)
- C#设计模式之简单工厂篇
- .NET设计模式(1): 简单工厂模式