设计模式之工厂模式一简单工厂模式-创新互联
设计模式之工厂模式一简单工厂模式
工厂模式由来:
在我们创建对象的时候使用,使用new操作的。如果多个对象创建都使用new会。所以工厂模式就是用来代理new操作的一种模式。根据工厂模式由来,我们可以看出工厂模式属于创建型模式。提供一种创建对象的最佳方式。
来源:凯哥Java(kaigejava)
工厂模式主要的分类:
简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式:
简单工厂模式不属于23中设计模式。又叫做静态工厂方法,简单工厂模式是工厂模式家族中最简单使用的一种模式。也可以理解为不同工厂模式的一个特殊实现。
如何理解?
举例:一个工厂类,一个产品的抽象类。
现实生活举例:一个面馆,可以生产多中面条。
如:面馆里面可以做的西红柿鸡蛋面、牛肉拉面、刀削面、哨子面、biangbiang面及热干面。
我们就来模拟这种场景:
我们先来看项目结构:
说明:
1:面条接口类
2:具体面条实现类
3:简单工厂类(面馆对象)
4:测试类型
我们先来看看面条接口类:
INoodlesInterface
我们在来看看,面条具体实现类--西红柿鸡蛋面类对象里面:
public class TomatoAndEggNoodles implements INoodlesInterface {
private String noodlesName;
public TomatoAndEggNoodles(){}
public TomatoAndEggNoodles(String noodlesName){
this.noodlesName = noodlesName;
}
@Override
public void noodlesdescription() {
System.out.println("大爷,您的"+this.noodlesName+"价格为:10元。");
}
}
其他具体面条实现类里面类似。这里就不一一贴出来了。
我们来看看面馆对象:
里面由三部分:
菜单部分、根据菜单序号制作面条、根据面条名称制作面条。
我们来看看根据菜单序号制作面条的:
public static INoodlesInterface makeNoodlesByMenuType(int noodletType){
switch (noodletType){
case NOODLES_TYPE_1:
return new TomatoAndEggNoodles("西红柿鸡蛋面");
case NOODLES_TYPE_2:
return new HandPulledNoodleSoupWithBeef("牛肉拉面");
case NOODLES_TYPE_3:
return new HandPulledNoodleSoupWithBeef("刀削面");
case NOODLES_TYPE_4:
return new NoodleWithPork("哨子面");
case NOODLES_TYPE_5:
return new BiangBiangNoodles("biangbiang面");
case NOODLES_TYPE_6:
return new HotAndDryNoodles("热干面");
default:
return new HotAndDryNoodles("热干面");
}
}
另一个方法类似。
查看测试类:
查看运行结果:
运行结果,达到我们预期的。
现在我们来总结下简单工厂模式:
简单工厂模式几个角色:
1:共有的抽象父类或者接口。如:司小司面馆的面条接口对象
2:继承或是实现该接口的具体子类。如:西红柿鸡蛋面、biangbiang面等
3:创建对象的简单工厂类。如:司小司的面馆
触发事件:
通过菜单的序号或者是面条名称触发工厂类制作对象的。
在来看看简单工厂模式特点:
通过一个类。是具体的类,并非接口或者抽象类的一个重要的创建方法,利用if判断语句说着是switch语句来进行判断,进而创建对应的产品。
联系凯哥--》凯哥Java(kaigejava)
个人博客:www.kaigejava.com
其中,这个重要的创建方法通常都是静态的。所以,简单工厂模式也被称之为静态工厂.
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:设计模式之工厂模式一简单工厂模式-创新互联
本文链接:http://ybzwz.com/article/dopisj.html