设计模式之工厂模式-工厂方法模式-创新互联

设计模式之工厂模式-工厂方法模式

创新互联主营乐清网站建设的网络公司,主营网站建设方案,app软件开发,乐清h5微信小程序开发搭建,乐清网站营销推广欢迎乐清等地区企业咨询

设计模式之工厂模式-工厂方法模式

大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目。

来源:凯哥Java(kaigejava)

需求:

披萨项目:

要方便披萨品种的扩展、要便于维护、要能运行时候方便扩展

来看看披萨族设计:

司小司经过分析得到:披萨都需要烘焙(bake)、切割(cut)、包装(box)还有就是披萨原材料准备(prepare)。其中变化的就是prepare准备的原材料。不同披萨的原材料不同,但是都需要进行烘焙、切割、包装。所以,我们这里原材料方法就做抽象的,不具体实现了。经过分析之后得到如下类图:

设计模式之工厂模式-工厂方法模式

第一次设计:使用简单工厂模式(可以参考上一篇的司小司面馆项目)发现不行。为什么呢?

随着披萨越来越火,很多地方都要JM了。如果JM的话,每个地方都要创建一个简单工厂模式那样,同样的代码,就要创建很多份,在维护的时候,就很麻烦的。

选择第二种设计:工厂方法模式。

先来看看项目结构:

设计模式之工厂模式-工厂方法模式

说明:

1:domain:是具体pojo对象。都继承于PizzaAbstract类

其中以BeiJin开头的,都是北京连锁店的。以ShanHai开头的都是上海连锁店的。

2和3是披萨和披萨订单的抽象类

4:具体连锁点的订单类。都继承于PiazzOrderAbstract类

5:测试类

我们先来看看两个抽象类。

PizzaAbstract类:

设计模式之工厂模式-工厂方法模式

PizzaOrderAbstract类:

设计模式之工厂模式-工厂方法模式

在来看一个北京的greekpizza:

设计模式之工厂模式-工厂方法模式

在来看看BeiJinOrderPizza:

设计模式之工厂模式-工厂方法模式

测试类:

设计模式之工厂模式-工厂方法模式

查看运行结果:

设计模式之工厂模式-工厂方法模式

通过上面代码演示,我们可以得到以下:

工厂方法模式设计方案:

将披萨项目里的披萨对象实例化功能抽象成抽象方法,在不同JM店具体实现功能。

工厂方法模式:

定义了一个创建对象的抽象方法,由子类决定要实例化的类。从这句话中,我们可以知道,工厂方法模式是将对象的实例化(创建)推迟到子类中了。

工厂方法模式和简单工厂模式对比:

简单工厂模式:

根据类的标识,通过工厂对象就可以得到具体类的实例对象了。在工厂对象里面,类对象的实例化如下:

设计模式之工厂模式-工厂方法模式

对象的实例化,是在工厂对象里面。

工厂方法模式:

是将对象的创建,抽取出来了。就是创建披萨的方法,抽取到一个具体的类中。

我们在来看看,披萨订单对象:

设计模式之工厂模式-工厂方法模式

在具体调用的时候:

PizzaOrderAbstract bjOder = new BeiJinOrderPizza();调用具体的子类。

设计模式之工厂模式-工厂方法模式

而对象的实例化,是在子类中进行的。

联系凯哥--》凯哥Java(kaigejava)

凯哥个人博客:www.kaigejava.com。个人博客可以私信凯哥哦~

工厂方法模式通过一个抽象的工厂类来创建工厂,再由工厂通过一定的方法创造一定的对象,这样如果有新的产C出现不需要修改已有代码只要新建一个产品的从子类和工厂的子类就可以啦。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:设计模式之工厂模式-工厂方法模式-创新互联
网页路径:http://scyanting.com/article/hodhp.html