您的位置:首页 > 其它

SSH中用到的设计模式之二——简单工厂

2014-10-26 19:13 190 查看
大家好,这一期主要介绍下很基础又很重要的简单工厂

对于工厂可能大家都很熟悉了,这是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上面的字段,理解成为一种抽象的能力,我在这里有一个大胆的想法,恩,本来想以大脑分区来抽象出功能的,但是这个操作涉及到多个方面的协调合作,希望读到我文章的朋友能帮我想下吧,这里暂时放下。可能光用工厂来创建还是太肤浅,还需要用到更多的知识。这里的例子先这样理解这吧。以后这个例子还是会继续写全面的

下面总结下简单工厂的优势:

让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做响应的修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: