抽象工厂模式--HeadFirst学习
来源:互联网 发布:店铺形象设计淘宝 编辑:程序博客网 时间:2024/04/30 18:25
一、模式定义:
抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂允许用户使用抽象的接口创建一组相关的产品,而不需要知道实际产出的具体产品是什么。这样一来,客户就从具体的产品中解耦。
二、与工厂方法之间关系:
1、抽象工厂在创建距离工厂的时候是通过工厂方法来实现的;
2、抽象工厂需要定义若干个方法用于创建一个产品家族,而工厂方法只需要一个方法创建一类对象即可;
3、两者都是为了将实例化对象的事情抽象出来单独处理;
三、抽象工厂例子代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AbstractFactoryPattern{ public abstract class PizzaStore { public void orderPizza(string type) { Pizza pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); } protected abstract Pizza createPizza(string type); } public abstract class Pizza { protected string m_Dough; protected string m_Sauce; protected string m_Cheese; protected string m_Clam; protected string m_Pepper; public abstract void prepare(); public void bake() { Console.WriteLine("Bake Over"); } public void cut() { Console.WriteLine("Cut Over"); } public void box() { Console.WriteLine("Box Over"); } } public abstract class IngredientFactory { public abstract string CreateDough(); public abstract string CreateSauce(); public abstract string CreateCheese(); public abstract string CreatePepper(); public abstract string CreateClam(); } public class NYIngredientFactory : IngredientFactory { public override string CreateDough() { return "NYIngredientFactory" + "_Dough"; } public override string CreateSauce() { return "NYIngredientFactory" + "_Dough"; } public override string CreateCheese() { return "NYIngredientFactory" + "_Cheese"; } public override string CreatePepper() { return "NYIngredientFactory" + "_Pepper"; } public override string CreateClam() { return "NYIngredientFactory" + "_Clam"; } } public class CGIngredientFactory : IngredientFactory { public override string CreateDough() { return "CGIngredientFactory" + "_Dough"; } public override string CreateSauce() { return "CGIngredientFactory" + "_Dough"; } public override string CreateCheese() { return "CGIngredientFactory" + "_Cheese"; } public override string CreatePepper() { return "CGIngredientFactory" + "_Pepper"; } public override string CreateClam() { return "CGIngredientFactory" + "_Clam"; } } public class ClamPizza : Pizza { private IngredientFactory m_pFactory; public ClamPizza(IngredientFactory pFactory) { m_pFactory = pFactory; } public override void prepare() { Console.WriteLine("ClamPizza"); m_Dough = m_pFactory.CreateDough(); m_Sauce = m_pFactory.CreateSauce(); m_Cheese = m_pFactory.CreateCheese(); m_Clam = m_pFactory.CreateClam(); m_Pepper = m_pFactory.CreatePepper(); } } public class CheesePizza : Pizza { private IngredientFactory m_pFactory; public CheesePizza(IngredientFactory pFactory) { m_pFactory = pFactory; } public override void prepare() { Console.WriteLine("CheesePizza"); m_Dough = m_pFactory.CreateDough(); m_Sauce = m_pFactory.CreateSauce(); m_Cheese = m_pFactory.CreateCheese(); m_Clam = m_pFactory.CreateClam(); m_Pepper = m_pFactory.CreatePepper(); } } public class VeggiePizza : Pizza { private IngredientFactory m_pFactory; public VeggiePizza(IngredientFactory pFactory) { m_pFactory = pFactory; } public override void prepare() { Console.WriteLine("VeggiePizza"); m_Dough = m_pFactory.CreateDough(); m_Sauce = m_pFactory.CreateSauce(); m_Cheese = m_pFactory.CreateCheese(); m_Clam = m_pFactory.CreateClam(); m_Pepper = m_pFactory.CreatePepper(); } } public class PepperOniPizza : Pizza { private IngredientFactory m_pFactory; public PepperOniPizza(IngredientFactory pFactory) { m_pFactory = pFactory; } public override void prepare() { Console.WriteLine("PepperOniPizza"); m_Dough = m_pFactory.CreateDough(); m_Sauce = m_pFactory.CreateSauce(); m_Cheese = m_pFactory.CreateCheese(); m_Clam = m_pFactory.CreateClam(); m_Pepper = m_pFactory.CreatePepper(); } } public class NYPizzaStore : PizzaStore { protected override Pizza createPizza(string type) { Pizza pizza = null ; IngredientFactory pFactory = new NYIngredientFactory(); if (type == "Cheese") pizza = new CheesePizza(pFactory); if (type == "Clam") pizza = new ClamPizza(pFactory); if (type == "Veggie") pizza = new VeggiePizza(pFactory); if (type == "PepperOni") pizza = new PepperOniPizza(pFactory); return pizza; } } public class ChicagoPizzaStore : PizzaStore { protected override Pizza createPizza(string type) { Pizza pizza = null; IngredientFactory pFactory = new CGIngredientFactory(); if (type == "Cheese") pizza = new CheesePizza(pFactory); if (type == "Clam") pizza = new ClamPizza(pFactory); if (type == "Veggie") pizza = new VeggiePizza(pFactory); if (type == "PepperOni") pizza = new PepperOniPizza(pFactory); return pizza; } }}namespace FactoryMethodPattern{ class Program { static void Main(string[] args) { PizzaStore nyStore = new NYPizzaStore(); nyStore.orderPizza("Cheese"); PizzaStore cgStore = new ChicagoPizzaStore(); cgStore.orderPizza("Clam"); } }}
0 0
- 抽象工厂模式--HeadFirst学习
- HeadFirst学习笔记2:抽象工厂模式
- Headfirst-6 抽象工厂模式
- 抽象工厂模式学习
- 《HeadFirst设计模式》书摘-装饰者模式/抽象工厂模式/工厂方法模式
- headfirst/工厂模式
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂
- HeadFirst 设计模式学习笔记4--工厂模式
- HeadFirst 设计模式学习笔记4--工厂模式
- HeadFirst 设计模式学习笔记4--工厂模式
- 【HeadFirst 设计模式学习笔记】4 工厂模式
- 《HeadFirst设计模式》学习笔记3-工厂模式
- HeadFirst采访“工厂方法”和“抽象工厂”
- HeadFirst采访“工厂方法”和“抽象工厂”
- HeadFirst采访“工厂方法”和“抽象工厂”
- 【HeadFirst设计模式】工厂模式
- HeadFirst 设计模式--工厂模式
- headFirst学习13.简单工厂模式与OC反射机制
- IAR uCOS .icf栈、堆区大小设置规则
- 3Sum | LeetCode O(N*N) Solution
- 从入门到精通之专家系统CLIPS(一)CLIPS初识与概述
- 黑马程序员--面向对象(day04)
- Android简单的View注入
- 抽象工厂模式--HeadFirst学习
- 如何关掉visual studio 2012 实时调试器
- 思想汇报(三)——永恒的爱情
- 【openjudge】Minecraft
- 以老K日记为例浅谈如何打造有固定粉丝的网站策略
- GUI对话框
- LeetCode Triangle
- hibernate的查询缓存
- Jenkins 入门资料