策略模式(Strategy Pattern)
背景介绍:
在小胖子的程序世界里,披萨店的管理问题一度让人头痛。猥琐和小胖子之间的矛盾激化,涛涛劝架的效果也不是很好。为了实现和平共处,小胖子决定引入策略模式,制定一套和平共处的原则,让每个人都能够按照自己的方式制作披萨,但在一些关键问题上达成一致。
设计模式应用:
策略模式
小胖子决定采用策略模式,制定一套制作披萨的和平共处原则。每位师傅可以自由选择自己擅长的制作方式,但在一些关键步骤上需要遵循共同的规范。这样,每个人都有发挥自己特长的空间,同时也保证了整个披萨店的制作流程的一致性。
代码示例:
// 披萨接口
interface Pizza {
String makePizza();
}
// 制作披萨的策略接口
interface PizzaMakingStrategy {
String execute();
}
// 具体制作芝士披萨的策略
class CheesePizzaMakingStrategy implements PizzaMakingStrategy {
@Override
public String execute() {
return "准备芝士披萨的材料,涂抹酱料,加入配料,烘焙披萨,切片,交付披萨。";
}
}
// 具体制作海鲜披萨的策略
class SeafoodPizzaMakingStrategy implements PizzaMakingStrategy {
@Override
public String execute() {
return "准备海鲜披萨的材料,涂抹酱料,加入配料,烘焙披萨,切片,交付披萨。";
}
}
// 披萨店,持有制作策略
class PizzaShop {
private PizzaMakingStrategy pizzaMakingStrategy;
public PizzaShop(PizzaMakingStrategy pizzaMakingStrategy) {
this.pizzaMakingStrategy = pizzaMakingStrategy;
}
public void setPizzaMakingStrategy(PizzaMakingStrategy pizzaMakingStrategy) {
this.pizzaMakingStrategy = pizzaMakingStrategy;
}
public String makePizza() {
return pizzaMakingStrategy.execute();
}
}
// 客户端
public class StrategyPatternExample {
public static void main(String[] args) {
PizzaMakingStrategy cheesePizzaStrategy = new CheesePizzaMakingStrategy();
PizzaMakingStrategy seafoodPizzaStrategy = new SeafoodPizzaMakingStrategy();
PizzaShop pizzaShop = new PizzaShop(cheesePizzaStrategy);
System.out.println("小胖子制作披萨:" + pizzaShop.makePizza());
// 猥琐接管制作,使用自己的制作方式
pizzaShop.setPizzaMakingStrategy(seafoodPizzaStrategy);
System.out.println("猥琐制作披萨:" + pizzaShop.makePizza());
}
}
和平共处
在这个例子中,小胖子通过策略模式为披萨店制定了和平共处的原则。每位师傅可以根据自己的喜好和特长选择制作方式,但在共同的关键步骤上,他们需要遵循相同的规范,以保证整个披萨店的制作流程的一致性。
策略模式使得每个人都能够充分发挥自己的创造力,同时又能够在重要的方面达成共识,从而使得披萨店的管理更加和谐。