当前位置: 首页 > 知识库问答 >
问题:

用哪种设计模式制作披萨

东门翰
2023-03-14

共有1个答案

咸臻
2023-03-14

所有示例都是用Java编写的

tltr:向下滚动到生成器模式

例如,如果您有一个表示矩形的类,就会使用decorator模式。矩形类只有一个计算周长的方法。现在您要向矩形添加一个方法来计算面积。问题是,您既不能也不想编辑类矩形,因此创建了一个新类MySuperDuperRectangle,如下所示:

周边界面:

interface Perimeter{
    public int perimeter();
}

由于某种原因我们无法改变的矩形

class Rectange implements perimeter{
    private int a, b;

    public Rectange(int a, int b){
        this.a = a;
        this.b = b;
    }

    public int getA(){
        return a;
    }
    public int getB(){
        return b;
    }

    public int perimeter(){
        return 2 * a + 2 * b;
    }

}

装饰的矩形:

class MySuperDuperRectange implements perimeter{
    private Rectange r;

    public MySuperDuperRectange(Rectange r){
        this.r = r;
    }

    public int perimeter(){
        return r.perimeter();
    }

    public float area(){
        return r.getA() * r.getB();
    }

}

我将使用Builder模式,因为任务是构建比萨饼。

Builder模式用于构建后字按原样存在的东西(并且在任何时候都不应该被改变)。

PizzaBuiler的基本实现如下所示:

enum Dough{
    WHITE, BROWN
}
enum Cheese{
    WHITE, BROWN
}

顶部枚举:

enum Topping{
    Kittens, Onions, Salami
}

yummi披萨:

class Pizza{

    private Dough dough;
    private Cheese cheese;
    private HashSet<Topping> toppings;

    private Pizza(Dough dough, Cheese cheese, HashSet<Topping> toppings){
        this.dough = dough;
        this.cheese = cheese;
        this.toppings = toppings;
    }

    //add some getters

}

比萨布人:

class PizzaBuilder{

    private Dough dough;
    private Cheese cheese;
    private HashSet<Topping> toppings = new HashSet<Topping>();

    public PizzaBuilder(){

    }
    public PizzaBuilder setDough(Dough dough){
        this.dough = dough;
        return this;
    }
    public PizzaBuilder setCheese(Cheese cheese){
        this.cheese = cheese;
        return this;
    }
    public PizzaBuilder addTopping(Topping topping){
        this.toppings.add(topping);
        return this;
    }
    public Pizza buildPizza(){
        return new Pizza(this.dough, this.cheese, this.toppings);
    }

}
Pizza myPizza = new PizzaBuilder()
        .setDough(Dough.WHITE)
        .setCheese(Cheese.WHITE)
        .addTopping(Topping.Kittens)
        .addTopping(Topping.Salami)
        .buildPizza();
 类似资料:
  • 我是设计模式领域的新手,我正在尝试了解其中的诀窍。我曾多次听到人们使用的“工厂”或“工厂模式”,但当我开始学习设计模式(目前我正在读GoF的书)时,我了解到实际上并不存在“工厂设计模式”这样的东西。GoF这本书描述了两种与工厂相关的模式:“抽象工厂”和“工厂方法”。 所以我的问题是这样的--当人们只说“工厂”(没有添加任何其他东西)时,他们实际上指的是哪种设计模式? 我找到了两个关于这件事的消息来

  • 在网上搜索和阅读了关于设计模式的文章后,我发现了三种类型,即行为型、创造型和结构型设计模式(GOF)。

  • 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。本文将介绍23种设计模式。

  • 在众所周知的设计书《Domain-Driven Terms》中,它被描述为: 设计模式是命名、抽象和识别对可重用的面向对象设计有用的的通用设计结构。设计模式确定类和他们的实体、他们的角色和协作、还有他们的责任分配。 每一个设计模式都聚焦于一个面向对象的设计难题或问题。它描述了在其它设计的约束下它能否使用,使用它后的后果和得失。因为我们必须最终实现我们的设计模式,所以每个设计模式都提供了例子..代码

  • 本文向大家介绍熟悉哪些设计模式?相关面试题,主要包含被问及熟悉哪些设计模式?时的应答技巧和注意事项,需要的朋友参考一下 按照自己的实际情况回答,当然是越多越好。比如我自己也就熟悉个单例模式。

  • 我编写了一个程序来解析XML文件,以获取一个名为SerialNum的特定标记值,该值包含在Header标记中。该文件的构造如下: < li >它包含一个标题和一个正文 < li >标题可能包含许多SerialNum标签。我们需要提取最后一个标签的值。 我使用Stax解析器获取SerialNum值,并编写了以下代码: 此代码提取所需的值,但代码质量不是很好:它不容易阅读和维护。它包含一个开关案例,如