资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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

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

创新互联是一家专注于成都做网站、网站制作与策划设计,海珠网站建设哪家好?创新互联做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:海珠等地区。海珠做网站价格咨询:028-86922220

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

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

来源:凯哥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出现不需要修改已有代码只要新建一个产品的从子类和工厂的子类就可以啦。


分享题目:设计模式之工厂模式-工厂方法模式
文章位置:http://cdkjz.cn/article/igesjd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220