:工厂模式1:方法模式--Pizza
#ifndef __PIZZA_H__
#define __PIZZA_H__
class Pizza
{
public:
Pizza(){}
virtual ~Pizza(){}
virtual const char* getPizzaName()
{
return "Pizza";
}
}; class NYCheesePizza : public Pizza
{
public:
NYCheesePizza(){}
virtual~NYCheesePizza(){}
virtual const char* getPizzaName()
{
return "NYCheesePizza";
}
}; class NYClamPizza : public Pizza
{
public:
NYClamPizza(){}
virtual~NYClamPizza(){}
virtual const char* getPizzaName()
{
return "NYClamPizza";
}
}; class NYVeggiePizza : public Pizza
{
public:
NYVeggiePizza(){}
virtual~NYVeggiePizza(){}
virtual const char* getPizzaName()
{
return "NYVeggiePizza";
}
}; class ChicagoVeggiePizza : public Pizza
{
public:
ChicagoVeggiePizza(){}
virtual~ChicagoVeggiePizza(){}
virtual const char* getPizzaName()
{
return "ChicagoVeggiePizza";
}
}; class ChicagoClamPizza : public Pizza
{
public:
ChicagoClamPizza(){}
virtual~ChicagoClamPizza(){}
virtual const char* getPizzaName()
{
return "ChicagoClamPizza";
}
}; class ChicagoCheesePizza : public Pizza
{
public:
ChicagoCheesePizza(){}
virtual~ChicagoCheesePizza(){}
virtual const char* getPizzaName()
{
return "ChicagoCheesePizza";
}
}; #endif
#ifndef __PIZZASTORE_H__
#define __PIZZASTORE_H__
#include "Pizza.h"
#include <iostream>
using namespace std;
class PizzaStore
{
public:
PizzaStore()
{
}
virtual~PizzaStore(){}
virtual Pizza* OrderPizza(const char* style)
{
Pizza *p = CreatePizza(style);
cout<<p->getPizzaName()<<endl;
return p;
}
private:
virtual Pizza* CreatePizza(const char* style) = 0
{ }
}; class NYPizzaStore :public PizzaStore
{
public:
NYPizzaStore(){}
virtual ~NYPizzaStore(){}
private:
virtual Pizza* CreatePizza(const char* style)
{
Pizza *p;
if (style == "Cheese")
{
p = new NYCheesePizza();
}
else if (style == "Clam")
{
p = new NYClamPizza();
}
else if (style =="Veggie")
{
p = new NYVeggiePizza();
}
else p = NULL;
return p;
}
}; class ChicagoPizzaStore :public PizzaStore
{
public:
ChicagoPizzaStore(){}
virtual ~ChicagoPizzaStore(){}
private:
virtual Pizza* CreatePizza(const char* style)
{
Pizza *p;
if (style == "Cheese")
{
p = new ChicagoCheesePizza();
}
else if (style == "Clam")
{
p = new ChicagoClamPizza();
}
else if (style == "Veggie")
{
p = new ChicagoVeggiePizza();
}
else p = NULL;
return p;
}
}; #endif
#include "Pizza.h"
#include <iostream>
#include "PizzaStore.h"
using namespace std;
int main()
{
cout << "OK" << endl;
PizzaStore *n = new NYPizzaStore();
Pizza *p = n->OrderPizza("Cheese");
p = n->OrderPizza("Clam"); n = new ChicagoPizzaStore();
p = n->OrderPizza("Cheese");
p = n->OrderPizza("Clam");
return 0;
}
:工厂模式1:方法模式--Pizza的更多相关文章
- 设计模式之模版方法模式(Template Method Pattern)
一.什么是模版方法模式? 首先,模版方法模式是用来封装算法骨架的,也就是算法流程 既然被称为模版,那么它肯定允许扩展类套用这个模版,为了应对变化,那么它也一定允许扩展类做一些改变 事实就是这样,模版方 ...
- 设计模式C#实现(九)——工厂方法模式和简单工厂
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 构成: 1.Product工厂方法创建的对象的接口 2.Concrete ...
- 【设计模式】工厂方法模式(Factory Method)
工厂方法模式 定义了一个创建对象的接口,但由子类决定要实现的类是哪一个.工厂方法让类把实例化推迟到子类.所有的工厂模式都用来封装对象的创建.工厂方法模式通过让子类决定改创建的对象是什么,来达到将对象创 ...
- 我的Java设计模式-工厂方法模式
女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...
- 用C#(.NET Core) 实现简单工厂和工厂方法模式
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...
- Yii2设计模式——工厂方法模式
应用举例 yii\db\Schema抽象类中: //获取数据表元数据 public function getTableSchema($name, $refresh = false) { if (arr ...
- C#设计模式之5:简单工厂和工厂方法模式
工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...
- 设计模式:工厂方法模式(Python)
来自:http://blog.csdn.net/ericzhong83/article/details/7604728 工厂方法模式(Factory Method Pattern): 定义了一个创建对 ...
- 设计模式C++实现——工厂方法模式
模式定义: 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 模式结构: Creator是一个类,它实现了全部操纵产品的方法,但不实现工厂方法 ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
随机推荐
- pointer-events
在做移动端的页面时,经常会遇到点击(touch)一个弹出的层,在上面触发点击(touch)事件,当弹出层关闭之后点击(touch)事件会穿透到下面的层,这时候如果下一层的某个元素也绑定了点击(touc ...
- 提取出一个组装基因组的gap(N)和重复序列区域,保存为bed格式
参见: Question: How to extract allnon-seqencedpositions from a genome (Fasta file)? test.fa >chr1 N ...
- 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,使用过程的一个坑
一.mysql表结构中存在如下设计时 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,如下 `updated_time` datetime NOT NU ...
- sgu 139 Help Needed!
题意:16数码是否有解? 先计算展开成一维后逆序对.如果0在最后一行,那么逆序偶时有解.4*4时(n为偶)0的位置上升一行,逆序对+3或-1(奇偶性变化).(n为奇时+2或+0,不变) #includ ...
- xShell的简单操作记录
查看java进程: ps ux | grep java 显示当前所有java进程pid的命令:jps 将压缩文件从本地上传到服务器上:rz 打包成jar包:mvn clean package -Dma ...
- (二)使用数组长度实现ADT bag(java)
目录 1.使用固定大小的数组实现ADT bag 包 1.1 一组核心方法 1.2 实现核心方法 1.3 让实现安全 1.4 测试核心方法 1.5 实现更多的方法 1.6 删除项的方法 1.7 测试 ...
- php打印
function preview() { bdhtml = window.document.body.innerHTML; sprnstr = "<!--startprint--> ...
- sscanf(),sscanf_s()的相关用法
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf ...
- [转载]完全理解Python迭代对象、迭代器、生成器
译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...
- H5新特性实现对class的增删改
直接撸代码 全靠死记硬背 没什么技术点 HTML部分 <!DOCTYPE html> <html lang="en"> <head> <m ...