软件体系架构:创造者模式和单例模式的应用

创造者模式

实例: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();
	    }
}

【运行截图】
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值