(1.9)--第5.4章-工厂模式软件设计与体系结构.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(1.9)--第5.4章-工厂模式软件设计与体系结构.ppt》由会员分享,可在线阅读,更多相关《(1.9)--第5.4章-工厂模式软件设计与体系结构.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5.4章 工厂模式1New操作制造对象的方法实例化一个具体类针对实现,而非针对接口使用New操作,是在针对实现编程除了New操作符之外,还有哪些制造对象的方法?第5.4章 工厂模式2在运行时根据条件来实例化具体的类一旦有变化或扩展,就必须对这段代码进行修改目标:如何将实例化具体类的代码从应用中抽离、或者封装起来,使它们不会干扰应用的其他部分?实例:比萨店业务模拟系统比萨:制造的对象第5.4章 工厂模式3第5.4章 工厂模式4更多的比萨类型第5.4章 工厂模式5增加更多的比萨类型,淘汰不畅销的比萨类型?第5.4章 工厂模式6找到并分离变化的部分工厂(factory)处理创建对象的细节order
2、Pizza成为该对象的客户,即需要一个对象时,就叫工厂做一个orderPizza只关心得到了一个对象,只要它实现了Pizza接口第5.4章 工厂模式7建立一个简单的比萨工厂第5.4章 工厂模式8问题这么做似乎只是把问题搬到另一个对象中罢了,问题依然存在?SimplePizzaFactorySimplePizzaFactory可以有许多客户。虽然目前只有可以有许多客户。虽然目前只有orderPizzaorderPizza()()方法是它的客户,然后可能还有其他类方法是它的客户,然后可能还有其他类(HomeDelivery)(HomeDelivery)会利用这个工厂来取得比萨。因此,会利用这个工厂
3、来取得比萨。因此,把创建比萨的代码包装进一个类,当以后实现改变时,把创建比萨的代码包装进一个类,当以后实现改变时,只需修改这个类即可。只需修改这个类即可。这种简单工厂还有其他的设计方式吗?可以使用静态方法定义一个简单的工厂,也称之为静可以使用静态方法定义一个简单的工厂,也称之为静态工厂。态工厂。publicstaticPizzacreatePizza(Stringname)第5.4章 工厂模式9重做PizzaStore类10简单工厂(更多的像是一种编程习惯,而非设计模式)简单工厂(更多的像是一种编程习惯,而非设计模式)第5.4章 工厂模式11简单工厂的引申比萨店加盟NYPizzaFactory
4、ChicagoPizzaFactory第5.4章 工厂模式12简单工厂的引申比萨店加盟第5.4章 工厂模式13利用SimplePizzaFactory,写出多个不同的工厂(NYPizzaFactory、ChicagoPizzaFactory、),各地加盟店都有适合的工厂可以使用目标:引入更多质量控制(捆绑PizzaStore和PizzaFactory)第5.4章 工厂模式14一种新的比萨店框架:工厂方法模式第5.4章 工厂模式15让createPizza()应对加盟店之间的差异,并负责创建正确种类的比萨第5.4章 工厂模式16orderPizza()方法在抽象的PizzaStore内而不是在子
5、类内定义,因此此方法并不知道哪个子类将实际上制作比萨orderPizza()方法对Pizza对象做了很多事情,但是由于Pizza对象是抽象的,orderPizza()并不知道哪些实际的类参与进它的操作当orderPizza()调用createPizza()时,某个比萨加盟店(NYStylePizzaStore、ChicagoStylePizzaStore)负责创建比萨第5.4章 工厂模式17加盟店只需继承PizzaStore类,然后提供createPizza()方法实现自己的比萨风味第5.4章 工厂模式18问题:实现另外一个比萨加盟店第5.4章 工厂模式19第5.4章 工厂模式20工厂方法用来
6、处理对象的创建,并将这样的行为封装在子类中。这样可以客户程序中关于超类的代码和子类对象创建代码解耦合。解耦合:orderPizza()并不知道参与的比萨类型第5.4章 工厂模式21使用比萨工厂方法订购比萨Ethan和Joel需要取得比萨店的实例有了各自的PizzaStore,Ethan和Joel分别调用orderPizza()方法,传入他们喜爱的比萨类型orderPizza()调用createPizza()创建比萨,但是它并不知道真正创建的是哪一种比萨,只知道这个比萨能够被烘烤、切片、装盒orderPizza()提供比萨给Ethan和JoelEthanEthan:New New York Ch
7、eese York Cheese PizzaPizzaJoelJoel:Chicago Chicago Cheese PizzaCheese Pizza227.4 工厂模式1.先需要一个纽约比萨店2.在纽约比萨店内下订单3.orderPizza()方法调用createPizza()方法4.每个比萨都必须经过如下处理才算完成orderPizza()23实实现现比比萨萨抽抽象象类类24实现比萨具体子类实现比萨具体子类第5.4章 工厂模式25测试比萨店业务模拟系统第5.4章 工厂模式26测试比萨店业务模拟系统第5.4章 工厂模式27工厂方法模式(Factory Method Pattern)创建者类
8、(Creator)第5.4章 工厂模式28工厂方法模式(Factory Method Pattern)产品类(Product)29平行的类层次平行的类层次第5.4章 工厂模式30定义工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。用途工厂模式用于封装对象的创建特点工厂模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。决定:并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的产品是哪一个。第5.4章 工厂模式31工厂方法模式框架第5.4章 工厂模式32问题当只有一个Concrete Cr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1.9 5.4 工厂 模式 软件设计 体系结构
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内