设计模式解析与实现(C++)之Factory模式
来源:互联网 发布:美国地缘政治知乎 编辑:程序博客网 时间:2024/06/06 00:00
以下是一个具体的例子,很直观
定义一个抽象产品 手机类
class Phone
{
public :
virtual void call()=0;//打电话
virtual void music()=0;//音乐
virtual void internet()=0;//上网
};
实现产品类1:实现一个iphone
class iPhone:public Phone
{
public:
void call()
{
std::cout<<"用iphone打电话"<<std::endl;
}
void music()
{
std::cout<<"用iphone听音乐"<<std::endl;
}
void internet()
{
std::cout<<"用iphone上网"<<std::endl;
}
};
实现产品类2:Android手机
class AndroidPhone:public Phone
{
public:
void call()
{
std::cout<<"用Android手机打电话"<<std::endl;
}
void music()
{
std::cout<<"用Android手机听音乐"<<std::endl;
}
void internet()
{
std::cout<<"用Android手机上网"<<std::endl;
}
};
抽象一个工厂(富士康、华为是代工厂)
class AbstractFactory
{
public:
virtual Phone * createPhone()=0;
};
实现抽象类 富士康工厂,生产iPhone
class Foxconn:public AbstractFactory
{
public:
Phone * createPhone()
{
return new iPhone;
}
};
实现抽象类 华为工厂,生产AndroidPhone
class Huawei:public AbstractFactory
{
public:
Phone * createPhone()
{
return new AndroidPhone;
}
};
以下是此问题的源代码(C++):
Factory.h
#ifndef _FACTORY_H#define _FACTORY_H#include<iostream>class Phone//抽象产品类 手机{public :virtual void call()=0;//打电话 均定义为纯虚函数,或者定义为虚函数加上实现virtual void music()=0;//听音乐virtual void internet()=0;//上网};class iPhone:public Phone//实现iPhone类{public:void call(){std::cout<<"用iphone打电话"<<std::endl;}void music(){std::cout<<"用iphone听音乐"<<std::endl;}void internet(){std::cout<<"用iphone上网"<<std::endl;}};class AndroidPhone:public Phone//实现AndroidPhone类{public:void call(){std::cout<<"用Android手机打电话"<<std::endl;}void music(){std::cout<<"用Android手机听音乐"<<std::endl;}void internet(){std::cout<<"用Android手机上网"<<std::endl;}};class AbstractFactory//抽象工厂类 手机生产代工厂{public:virtual Phone * createPhone()=0;//Phone类型的指针函数};class Foxconn:public AbstractFactory//实现Foxconn类,生产iPhone{public:Phone * createPhone(){return new iPhone;}};class Huawei:public AbstractFactory//实现Huawei类,生产AndroidPhone{public:Phone * createPhone(){return new AndroidPhone;}};#endif
Factory.cpp
#include "Factory.h"int _tmain(int argc, _TCHAR* argv[]){AbstractFactory *foxconn=new Foxconn();Phone * iphone=foxconn->createPhone();iphone->call();iphone->music();iphone->internet();AbstractFactory *huawei=new Huawei();Phone * androidphone=huawei->createPhone();androidphone->call();androidphone->music();androidphone->internet();return 0;}
运行结果如下:
- 设计模式解析与实现(C++)之Factory模式
- 设计模式的解析和实现(C++)之一-Factory模式
- 设计模式的解析和实现(C++)之一-Factory模式
- 设计模式解析和实现之二-Abstract Factory模式
- 常见设计模式的解析和实现(C++)之二-Abstract Factory模式
- 常见设计模式的解析和实现(C++)之二-Abstract Factory模式
- 常见设计模式的解析和实现(C++)之二-Abstract Factory模式
- 常见设计模式的解析和实现(C++)之二-Abstract Factory模式
- 乱砍设计模式之五 -- FACTORY 与 ABSTRACT FACTORY模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 设计模式之Factory
- 设计模式之Factory
- 设计模式之Factory
- 设计模式之Factory
- I/O学习 --
- UML中的stereotype
- chapter6 Hibernate的关联映射
- 黑马程序员_repeater分页实现
- Redis 起步
- 设计模式解析与实现(C++)之Factory模式
- linxu __setup 宏
- 八款开源 Android 游戏引擎 (巨好的资源)
- C# 获取当前路径方法
- Oracle 字符集的查看和修改
- android:shape的使用
- C++中实现Singleton的正确方法
- chapter7 Hibernate查询
- XML 属性积累