抽象工厂模式
来源:互联网 发布:神机妙算软件打不开 编辑:程序博客网 时间:2024/05/10 18:12
抽象工厂模式
- 抽象工厂模式
- 概念
- 产品及其等级结构
- 角色及职责
- 案例
- 总结
概念
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
产品及其等级结构
对于工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿;但是不能同时生产多个产品。
抽象工厂:能同时生产一个产品族(多个产品)。===》抽象工厂存在原因
重要区别:
工厂模式只能生产一个产品。(要么香蕉、要么苹果)
抽象工厂可以一下生产一个产品族(里面有很多产品组成)
角色及职责
抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。只生产一个具体的产品实例。抽象产品(Product)角色
抽象工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色
抽象工厂模式所创建的具体实例对象,里面有具体产品的属性,均继承自抽象产品类,
案例
#include<iostream>using namespace std;/*抽象产品--作为抽象工厂的依赖*/class Fruit{public: virtual void SayName()=0;};/*抽象工厂--里面有产品线(产品线是固定的,这是缺点)*/class AbstractFactory{public: virtual Fruit* CreateBanana()=0; virtual Fruit* CreateApple()=0;};/*具体产品1--北方香蕉*/class NorthBanana:public Fruit{ virtual void SayName() { cout<<"我是北方香蕉"<<endl; }};/*具体产品2--北方苹果*/class NorthApple:public Fruit{ virtual void SayName() { cout<<"我是北方苹果"<<endl; }};/*具体产品3--南方香蕉*/class SouthBanana:public Fruit{ virtual void SayName() { cout<<"我是南方香蕉"<<endl; }};/*具体产品3--南方苹果*/class SouthApple:public Fruit{ virtual void SayName() { cout<<"我是南方苹果"<<endl; }};/*具体工厂1--北方工厂*/class NorthFactory:public AbstractFactory{ virtual Fruit* CreateBanana() { return new NorthBanana; } virtual Fruit* CreateApple() { return new NorthApple; }};/*具体工厂2--南方工厂*/class SouthFactory:public AbstractFactory{ virtual Fruit* CreateBanana() { return new SouthBanana; } virtual Fruit* CreateApple() { return new SouthApple; }};/*测试案例*/int main261(){ Fruit * fruit = NULL;//抽象产品 AbstractFactory *af = NULL;//抽象工厂 af = new SouthFactory;//创建北方工厂 fruit = af->CreateApple();//生产苹果 fruit->SayName(); delete fruit;//内存回收 fruit = af->CreateBanana();//生产香蕉 fruit->SayName(); delete fruit; delete af; af = new NorthFactory;//创建南方工厂 fruit = af->CreateApple();//生产苹果 fruit->SayName(); delete fruit; fruit = af->CreateBanana();//生产香蕉 fruit->SayName(); delete fruit; delete af;//内存回收 return 0;}
总结
抽象工厂相比普通的工厂方法模式,在代码上表现为,抽象工厂里面的成员函数变多了,每一个成员函数在具体工厂被重写以后,又都能产生一种具体的产品,所以一个具体工厂便能够产生多个产品的实例。在生活中,便是生产复杂的产品线,比如有几个档次的产品,每个档次里面又有多种不同的产品!而普通工厂方法模式的抽象工厂一般只有一个成员函数,相应的,具体的工厂就只能生产一个单一的产品,适用于产品结构单一的情况!
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 各种距离
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- iOS10 UI教程视图调试
- 22、 BUG at __get_vm_area_node()
- mysql免安装版数据库精简
- 抽象工厂模式
- 【框架】Android图片加载Glide使用方法
- 《智能设备艺术、科技、文化作品实例开发与设计》android开发系列介绍---2.1棋类作品:华容道
- jQuery 创建插件
- 常用的NSLOG日志打印格式
- MD5加密
- 23 PC is at dpm_wd_handler+0x2c/0x30
- 字符串的常用提取方法
- 润乾报表如何连接Derby数据库