首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >设计模式之生成器模式

设计模式之生成器模式

作者头像
beginor
发布2020-08-10 11:28:56
发布2020-08-10 11:28:56
4120
举报

设计模式之生成器模式

结构

说明

Separate the construction of a complex object from its representation allowing the same construction process to create various representations.

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用条件

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
  • 当构造过程必须允许被构造的对象有不同的表示时。

实现

代码语言:javascript
复制
abstract class PizzaBuilder {

   protected Pizza Pizza;

   public Pizza GetPizza() {
      return this.Pizza;
   }

   public void CreateNewPizzaProduct() {
      this.Pizza = new Pizza();
   }

   public abstract void BuildDough();

   public abstract void BuildSauce();

   public abstract void BuildTopping();

}

class HawaiianPizzaBuilder : PizzaBuilder {

   public override void BuildDough() {
      this.Pizza.Dough = "cross";
   }

   public override void BuildSauce() {
      this.Pizza.Sauce = "mild";
   }

   public override void BuildTopping() {
      this.Pizza.Topping = "ham+pineapple";
   }
}

class SpicyPizzaBuilder : PizzaBuilder {

   public override void BuildDough() {
      this.Pizza.Dough = "pan baked";
   }

   public override void BuildSauce() {
      this.Pizza.Sauce = "hot";
   }

   public override void BuildTopping() {
      this.Pizza.Topping = "pepperoni + salami";
   }
}

class Cook {

   private PizzaBuilder _pizzaBuilder;

   public void SetPizzaBuilder(PizzaBuilder pb) {
      _pizzaBuilder = pb;
   }

   public Pizza GetPizza() {
      return _pizzaBuilder.GetPizza();
   }

   public void ConstructPizza() {
      _pizzaBuilder.CreateNewPizzaProduct();
      _pizzaBuilder.BuildDough();
      _pizzaBuilder.BuildSauce();
      _pizzaBuilder.BuildTopping();
   }
}

public class Pizza {

   private string _dough = string.Empty;
   private string _sauce = string.Empty;
   private string _topping = string.Empty;

   public string Dough {
      get {
         return _dough;
      }
      set {
         _dough = value;
      }
   }

   public string Sauce {
      get {
         return _sauce;
      }
      set {
         _sauce = value;
      }
   }

   public string Topping {
      get {
         return _topping;
      }
      set {
         _topping = value;
      }
   }
}

class Program {

   static void Main(string[] args) {
      PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
      var cook = new Cook();
      cook.SetPizzaBuilder(hawaiianPizzaBuilder);
      cook.ConstructPizza();
      // create the product
      var hawaiian = cook.GetPizza();

      PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
      cook.SetPizzaBuilder(spicyPizzaBuilder);
      cook.ConstructPizza();
      // create another product
      var spicy = cook.GetPizza();
   }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式之生成器模式
    • 结构
    • 说明
    • 适用条件
    • 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档