创造者模式
实例:KFC套餐
建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。利用建造者模式设计,用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。
【模式UML图】
【模式代码(JAVA语言实现)】
KFCServer.java:
package ITF;
import MealEntity.Meal;
public class KFCServer {
private MealBuilder mealBuilder;
public KFCServer(MealBuilder mealBuilder) {
this.mealBuilder = mealBuilder;
}
public Meal construct(){
mealBuilder.buildFood();
mealBuilder.buildDrink();
return mealBuilder.getMeal();
}
}
MealBuilder.java:
package ITF;
import MealEntity.Meal;
public abstract class MealBuilder {
protected Meal meal = new Meal();
public abstract void buildFood();
public abstract void buildDrink();
public Meal getMeal(){
return meal;
}
}
Meal.java
package MealEntity;
public class Meal {
private String food;
private String drink;
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public String getDrink() {
return drink;
}
public void setDrink(String drink) {
this.drink = drink;
}
}
MealA.java
package MealType;
import ITF.MealBuilder;
/**
* 具体建造者:A套餐
*/
public class MealA extends MealBuilder{
public void buildDrink() {
meal.setDrink("可乐");
}
public void buildFood() {
meal.setFood("薯条");
}
}
MealB.java
package MealType;
import ITF.MealBuilder;
/**
* 具体建造者:B套餐
*/
public class MealB extends MealBuilder{
public void buildDrink() {
meal.setDrink("柠檬果汁");
}
public void buildFood() {
meal.setFood("鸡翅");
}
}
Main.java
package ITF;
import MealEntity.Meal;
import MealType.MealA;
import MealType.MealB;
public class Main {
public static void main(String[] args) {
MealA a = new MealA();
KFCServer waitera = new KFCServer(a);
Meal mealA = waitera.construct();
System.out.print("套餐A的组成:");
System.out.println("食物:"+mealA.getFood()+"; "+"饮品:"+mealA.getDrink());
MealB b = new MealB();
KFCServer waiterb = new KFCServer(b);
Meal mealB = waiterb.construct();
System.out.print("套餐B的组成:");
System.out.println("食物:"+mealB.getFood()+"; "+"饮品:"+mealB.getDrink());
}
}
【运行截图】
单例模式
在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。
【模式UML图】
【模式代码】
PrintSpooler.java
package SY4;
public class PrintSpooler {
private static PrintSpooler instance=null;
private PrintSpooler(){};
public static PrintSpooler getInstance(){
if(instance == null)
instance = new PrintSpooler();
else
new PrintSpoolerException();
return instance;
}
public void Suspension(){
System.out.println("中止");
}
public void change(){
System.out.println("改变");
}
public void delete(){
System.out.println("删除");
}
}
PrintSpoolerException.java
package SY4;
public class PrintSpoolerException {
public PrintSpoolerException(){
System.out.println("重复创建");
}
}
Main.java
package SY4;
public class Main {
public static void main(String[] args) {
PrintSpooler p1 = PrintSpooler.getInstance();
//PrintSpooler p2 = PrintSpooler.getInstance();
p1.change();
}
}
【运行截图】