抽象工厂模式



《抽象工厂模式》由会员分享,可在线阅读,更多相关《抽象工厂模式(38页珍藏版)》请在文档大全上搜索。
1、第二讲第二讲 抽象工厂模式抽象工厂模式抽象工厂模式名称:抽象工厂模式(Abstract Factory Pattern)或Kit模式意图:提供一系列相关或相互依赖对象的接口而无需指定他们具体的类。核心:抽象工厂模式(Abstract Factory PatternAbstract Factory Pattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品。抽象工厂模式抽象工厂模式的动机考虑一个支持多种视感(look-
2、and- feel)表准的用户界面工具包,例如Motif和Presentation Manager.不同的视感风格为滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组建。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。抽象工厂模式的动机为解决这一问题,定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一个类基本窗口组件的接口.每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于一个抽象窗口组件类,WidgetFactory接口都有一个返
3、回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格。抽象工厂模式的作用抽象工厂模式的类图抽象工厂模式的类图抽象工厂模式的时序图抽象工厂模式的实例一抽象工厂模式的实例二大陆生态系统:已知动物世界中各个大陆的动物是不同的,例如非洲有狮子和角马,美洲有狼和野牛。动物可划分为食草和食肉动物,狮子和美洲狼属于食肉动物,而野牛和角马属于食草动物。狮子捕食角马,美洲狼捕食野牛。抽象工厂模式的实例二抽象工厂模式的实例三电脑生产:IBM, Dell都是著名的计算机生产厂家,他们采用的主板、硬盘和CPU是不同的,但主板、硬盘和CP
4、U 之间一定要兼容。现硬盘有Maxtor和WestDigit两种,CPU有AMD和Intel, 主板有MSI865PE 和MSIK7N2G两种。IBM采用Intel的CPU和WestDigit的硬盘,Dell采用AMD的CPU和Maxtor的硬盘。抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例三抽象工厂模式的实例四综合案例(肯德基):X故事中的角色故事中的角色肯德基店生产食物的工厂食物(麻辣鸡腿汉堡、奥尔良烤鸡翅、薯条、可乐)工厂生产的产品爸爸、儿子客户抽象工厂模式的实例四综合案例(肯德基):抽象化分析
5、抽象化分析“开开- -闭闭”原则原则- -抽象抽象抽象最大话抽象最大话- - “依赖倒置依赖倒置”抽象工厂模式的实例四抽象工厂模式的实例四package com.demo.factory.model;/* * *食品基类*/public abstract class AbstractBaseFood/ 类别protected String kind;/ 数量protected int num;/ 价格protected float price;/ 合计public float totalPrice()return this.num * this.price;抽象工厂模式的实例四package
6、com.demo.factory.model;/* * 抽象食物接口 * */public interface IFood/* * 打印输出食物信息 */void printMesage();抽象工厂模式的实例四package com.demo.factory.model;/* * 汉堡类 * */public abstract class Hamburg extends AbstractBaseFood implements IFoodpublic void printMesage()System.out.println(- + this.kind + 风味汉堡, t 单价: + this.
7、price + t 数量: + this.num + , t 合计: + 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.