抽象工厂模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

抽象工厂模式的实例四
/** * 客户类 */ public class Customer { // 抽象工厂 private IKfcFactory kfcFactory; // 构造方法将抽象工厂作为参数传入 public Customer(IKfcFactory kfcFactory) { this.kfcFactory = kfcFactory; } /** * 订购食物 */ // 订购鸡腿汉堡 public float orderHamburg(int num) { // 获得麻辣鸡腿汉堡 Hamburg hamburg = kfcFactory.createHamburg(num); // 输出订购信息 hamburg.printMesage(); // 返回总价 return hamburg.totalPrice(); }…
// 生产饮料 public Beverage createBeverage(int num); }
抽象工厂模式的实例四
package com.demo.factory.itf; import com.demo.factory.model.Beverage; import com.demo.factory.model.ChickenWings; … public class ChinaKfcFactory implements IKfcFactory { // 生产可乐 public Beverage createBeverage(int num) { return new ChinaBeverage(num); } // 生产奥尔良烤鸡翅 public ChickenWings createChickenWings(int num) { return new ChinaChickenWings(num); } // 成产薯条 public FrenchFries createFrenchFries(int num) { return new ChinaFrenchFries(num); } // 生产麻辣鸡腿汉堡 public Hamburg createHamburg(int num) { return new ChinaHanburm(num);
System.out.println("总计: "+ (hamhurgMoney + chickenWingsMoney +
frenchFriesMoney + beverageMoney)); } }
抽象工厂模式的实例四
1.多用对象组合,少用继承 2.针对抽象编程,不针对实现编程 3.产品对象通过工厂暴露的方法创建
// 合计 public float totalPrice() { return this.num * this.price; } }
抽象工厂模式的实例四
package com.demo.factory.model;
/** * 抽象食物接口 * */ public interface IFood { /** * 打印输出食物信息 */ void printMesage(); }
抽象工厂模式和工厂模式的区别
工厂方法模式用来创建一个抽象产品, 具 体工厂实现工厂方法来创建具体产品,而抽 象工厂模式用来创建一个产品家族的抽象类 类型。
抽象工厂模式的优势与缺陷
优势:隔离了具体类的生成, 使得客户不知道 什么被创建了,因此更换一个具体工厂变得相 对容易。
优势:当一个产品族中多个对象被设计成一起 工作时, 抽象工厂保证客户端只是用同一产品 族中的对象。
抽象工厂模式的应用场景
一个系统要独立于它产品的创建、组合和表 示的时候。
一个系统要由多个产品系列中的一个来配置 时。
当你要强调一系列相关的产品对象的设计以 便进行联合使用时。
当你提供一个产品类库,而只是想显示他们 的接口而不是现实时。
作业
采用抽象工厂模式对大陆生态模式进行 UML建模,并进行实现。
第二讲 抽象工厂模式
抽象工厂模式
名称:抽象工厂模式(Abstract Factory Pattern)或 Kit模式
意图:提供一系列相关或相互依赖对象的接口而无 需指定他们具体的类。
核心:抽象工厂模式(Abstract Factory Pattern) 提供了一个接口,用于创建相关或者依赖对象的家族, 而不需要指定具体实现类。抽象工厂模式允许客户使 用抽象接口来创建一组相关的产品,客户类和工厂类 分开,客户需要任何产品的时候,只需要向工厂请求 即可,客户无须修改就可以获得新产品。
现硬盘有Maxtor和WestDigit两种,CPU 有AMD和Intel, 主板有MSI865PE 和 MSIK7N2G两种。
IBM采用Intel的CPU和WestDigit的硬盘, Dell采用AMD的CPU和Maxtor的硬盘。
抽象工厂模式的实例三
抽象工厂模式的实例三
抽象工厂模式的实例三
加强做责任心,责任到人,责任到位 才是长 久的发 展。20. 11.520.1 1.5Thu rsday, November 05, 2020
弄虚作假要不得,踏实肯干第一名。1 4:18:4014:18:4014:1811 /5/2020 2:18:40 PM
this.totalPrice()); } }
抽象工厂模式的实例四
package com.demo.factory.model.kfc;
import com.demo.factory.model.Hamburg;
/** * 中国风味的麻辣鸡腿汉堡 * */ public class ChinaHanburm extends Hamburg { /** *构造方法 * * @param kind * @param price * @param num */ public ChinaHanburm(int num) { this.kind = "麻辣"; this.price = 14.0f; this.num = num; } }
抽象工厂模式的实例四
/** * */ // 一个麻辣鸡腿汉堡 float hamhurgMoney = customer.orderHamburg(1); // 四个新奥尔良烤鸡翅 float chickenWingsMoney = customer.orderChickenWings(4); //一包薯条 float frenchFriesMoney = customer.orderFrenchFries(1); // 两杯可乐 float beverageMoney = customer.orderBeverage(2);
优势:当一个产品族中多个对象被设计成一起工作 时, 抽象工厂保证客户端只是用同一产品族中的对 象。
缺陷:添加新的产品对象时,难以扩展抽象工厂以 产生新种类的产品,因为AbstractFactory规定了所 有可能被创建的产品集合,从而涉及到对 AbstractFactory 及其所有子类的修改。
动物可划分为食草和食肉动物,狮子和美 洲狼属于食肉动物,而野牛和角马属于食 草动物。
狮子捕食角马,美洲狼捕食野牛。
抽象工厂模式的实例二
抽象工厂模式的实例三
电脑生产:
IBM, Dell都是著名的计算机生产厂家,他 们采用的主板、硬盘和CPU是不同的,但 主板、硬盘和CPU 之间一定要兼容。
抽象工厂模式的实例四
package com.demo.factory.itf;
import com.demo.factory.model.Beverage; import com.demo.factory.model.ChickenWings; import com.demo.factory.model.FrenchFries; import com.demo.factory.model.Hamburg;
缺陷:添加新的产品对象时,难以扩展抽象工厂以产生 新种类的产品,因为AbstractFactory规定了所有可能被 创建的产品集合,从而涉及到对AbstractFactory 及其 所有子类的修改。
抽象工厂模式的优势与缺陷
优势:隔离了具体类的生成, 使得客户不知道什么 被创建了,因此更换一个具体工厂变得相对容易。
抽象工厂模式的动机
为解决这一问题,定义一个抽象的 WidgetFactory类,这个类声明了一个用来创建 每一个类基本窗口组件的接口.
每一类窗口组件都有一个抽象类,而具体子类 则实现了窗口组件的特定视感风格。对于一个 抽象窗口组件类,WidgetFactory接口都有一个 返回新窗口组件对象的操作。
客户调用这些操作以获得窗口组件实例,但客户并不 知道他们正在使用的是哪些具体类。这样客户就不依 赖于一般的视感风格。
抽象工厂模式的作用
抽象工厂模式的类图
抽象工厂模式的类图
抽象工厂模式的时序图
抽象工厂模式的实例一
抽象工厂模式的实例二
大陆生态系统:
已知动物世界中各个大陆的动物是不同的, 例如非洲有狮子和角马,美洲有狼和野牛。
抽象工厂模式的实例三
抽象工厂模式的实例三
抽象工厂模式的实例三
抽象工厂模式的实例三
抽象工厂模式的实例四
综合案例(肯德基):
故事中的角色
肯德基店—生产食物的工厂
食物(麻辣鸡腿汉堡、奥尔良烤鸡翅、薯 条、可乐)—工厂生产的产品
爸爸、儿子—客户
抽象工厂模式的实例四
综合案例(肯德基):
/** * 肯德基抽象工厂 * */ public interface IKfcFactory {
// 生产汉堡 public Hamburg createHamburg(int num);
// 生产薯条 public FrenchFries createFrenchFries(int num);
// 生产鸡翅 public ChickenWings createChickenWings(int num);
抽象工厂模式的实例四
package com.demo.factory.model;
/** * 汉堡类 * */ public abstract class Hamburg extends AbstractBaseFood implements IFood {
public void printMesage() { System.out.println("--" + this.kind + "风味汉堡, \t 单价: "+ this.price + "\t 数量:" + this.num + ", \t 合计:" +
抽象化分析
“开-闭”原则-抽象
抽象最大话- “依赖倒置”
抽象工厂模式的实例四
抽象工厂模式的实例四
package del;
/** * *食品基类 */ public abstract class AbstractBaseFood { // 类别 protected String kind; // 数量 protected int num; // 价格 protected float price;
抽象工厂模式
抽象工厂模式的动机
考虑一个支持多种视感(look- and- feel)表准 的用户界面工具包,例如Motif和Presentation Manager.
不同的视感风格为滚动条、窗口和按钮等用户 界面“窗口组件”定义不同的外观和行为。
为保证视感风格标准间的可移植性,一个应用 不应该为一个特定的视感外观硬编码它的窗口 组建。在整个应用中实例化特定视感风格的窗 口组件类将使得以后很难改变视感风格。
抽象工厂模式的实例四
public class MainApp { /** * 主应用程序方法 */ public static void main(String[] args) { /** * 定义一个肯德基工厂IKfcFactory */ IKfcFactory kfcFactory = new ChinaKfcFactory(); /** * 用户进入肯德基开始点餐 */ Customer customer = new Customer(kfcFactory);
相关文档
最新文档