`
sybilwh
  • 浏览: 12389 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

一个微波炉,叫你设计,需要用到什么设计模式?

阅读更多

最近学习+复习各种常用设计模式,看到一道题目http://www.iteye.com/topic/243309和http://topic.csdn.net/u/20091125/14/99c028d1-6cf0-4f82-b852-b94b84c4fb45.html,很有意思,不看不知道,面向对象真奇妙!

 

其他人怎么说,不如自己练,于是用了单例模式,策略模式和命令模式写了一个初版的微波炉,考虑了微波炉操作的时候不能开门。策略模式用于烹饪鱼和鸡等一套【高级】微波炉功能,命令模式用于“煮”,“煎”,“高火”,“中火”,“低火”等【基础】功能。

 

测试类CookFishTest:

 

package com.hui.test;

import java.util.ArrayList;
import java.util.List;

import com.hui.Machine;
import com.hui.food.Fish;
import com.hui.food.Food;
import com.hui.strategy.CookFishStrategy;

public class CookFishTest {
	
	public static void main(String[] args){
		CookFishTest cft = new CookFishTest();
		System.out.println("正常测试开始……");
		cft.regular();
		System.out.println("正常测试结束……");
	}
	
	private void regular(){
		Machine machine = Machine.getInstance();
		machine.openDoor();
		Fish fishA = new Fish();
		List<Food> fishList = new ArrayList<Food>();
		fishList.add(fishA);
		machine.putFood(fishList);
		machine.closeDoor();
		machine.setTime(10);
		machine.setCookStrategy(new CookFishStrategy(fishList));
		machine.operate();
	}
}
 
 

 

各种命令,以”煮“为例:

package com.hui.command;


public class BoilCommand implements Command {

	
	
	public void execute() {
		System.out.println("煮……");
	}

}
 

各种策略,以烹饪鱼为例:

package com.hui.strategy;

import java.util.ArrayList;
import java.util.List;

import com.hui.command.BoilCommand;
import com.hui.command.Command;
import com.hui.command.FryCommand;
import com.hui.command.HighCommand;
import com.hui.command.LowCommand;
import com.hui.command.MiddleCommand;
import com.hui.food.Fish;

public class CookFishStrategy implements CookStrategy{

	//这里使用List<Food>会出错,原因大抵是"苹果可以是水果的子类
	//,但装苹果的袋子不是装水果的袋子的子类"
	private List<?> fishList = new ArrayList<Fish>();
	
	public CookFishStrategy(List<?> fishList){
		this.fishList = fishList;
	}
	
	public void cook(){
		Command boil = new BoilCommand();
		boil.execute();
		Command high = new HighCommand();
		high.execute();
		Command middle = new MiddleCommand();
		middle.execute();
		Command low = new LowCommand();
		low.execute();
		Command fry = new FryCommand();
		fry.execute();
		System.out.println("烹饪结束!可以取出食物!");
	}
}

 

策略类的接口:

package com.hui.strategy;


public interface CookStrategy {

	public void cook();
}

 

微波炉主类:

package com.hui;

import java.util.List;

import com.hui.food.Food;
import com.hui.strategy.CookStrategy;

public class Machine {

	private CookStrategy cookStrategy;
	private List<Food> foodList;
	private static Machine instance;
	private int minutes;
	private byte[] lock = new byte[0]; 
	
	private Machine(){
		System.out.println("这有一个微波炉A……");
	}
	
	public static synchronized Machine getInstance(){
		if(instance == null){
			instance = new Machine();
		}
		return instance;
	}
	
	public void openDoor(){
		synchronized(lock){
			System.out.println("开门……");
		}
	}
	
	public void closeDoor(){
		System.out.println("关门……");
	}
	
	public void setTime(int minutes){
		System.out.println("设置时间" + minutes + "分钟!");
		this.minutes = minutes;
	}
	
	public void putFood(List<Food> foodList){
		System.out.println("放食物……");
		this.foodList = foodList;
	}

	public void setCookStrategy(CookStrategy cookStrategy) {
		this.cookStrategy = cookStrategy;
	}
	
	public void operate(){
		synchronized(lock){
			cookStrategy.cook();
		}
	}
}
 

 

分享到:
评论

相关推荐

    用Java编写的 微波炉模拟器

    1. **启动与关闭**:在Java程序中,我们可以设计一个主类`MicrowaveOven`作为微波炉的核心,包含一个`start()`方法来开启微波炉,以及一个`stop()`方法来停止运行。同时,为了确保用户安全,微波炉在运行时应锁定...

    FPGA数电设计微波炉

    3. **状态机**:微波炉的工作模式通常由一个有限状态机(FSM)控制,如预热、加热、暂停和关闭等状态。每个状态对应一组操作,状态之间的转移取决于特定的输入条件。 4. **时序逻辑**:微波炉的定时功能需要精确的...

    单片机毕业设计——可编程微波炉控制器系统设计

    单片机毕业设计——可编程微波炉控制器系统的构建是一个典型的嵌入式系统项目,它涉及到硬件设计、软件编程以及系统集成等多个方面的知识。在这个设计中,学生将学习到如何运用单片机技术来实现一个复杂的家用电器...

    java模拟微波炉程序

    这个程序的设计目标是能够处理从0到9.59.59的烹饪时间,为用户提供一个基本的模拟微波炉功能。 首先,我们需要创建一个`Microwave`类,它是整个模拟的核心。`Microwave`类应包含以下主要属性: 1. **烹饪时间...

    毕业论文可编程微波炉控制器设计说明.doc

    本文将深入探讨如何使用现场可编程门阵列(FPGA)芯片和硬件描述语言(VHDL)设计一个可编程微波炉控制器。在电子工程领域,FPGA因其灵活性和高性能而被广泛应用于各种控制系统。VHDL作为硬件描述语言的一种,允许...

    软件工程 --微波炉仿真程序

    在软件工程领域,微波炉仿真程序是一个典型的案例,它涉及到多个关键概念和技术。这个程序设计的目的是模拟现实生活中微波炉的操作流程,包括时间选择、智能控制、开关门逻辑以及警报系统,这些都是软件工程实际应用...

    550706406633423微波炉.zip

    【标题】"550706406633423微波炉.zip" 提供的文件是一个关于微波炉设计的压缩包,其中包含了一个名为 "四位数码管、微波炉.pdsprj" 的项目文件。这个项目文件可能是使用某种电路设计或嵌入式系统开发软件创建的,...

    weibolu.rar_weibolu_微波炉

    9. **设计模式**:在设计微波炉类时,可能需要用到设计模式,如单例模式(Singleton)以确保程序中只有一个微波炉实例,或者工厂模式(Factory)来创建不同类型的微波炉。 10. **打包与压缩**:文件名为"weibolu....

    参考资料-基于单片机的可编程微波炉控制器系统设计.zip

    在本项目中,我们关注的是一个基于单片机的可编程微波炉控制器系统的详细设计。这个系统的设计和实现充分体现了单片机在嵌入式硬件领域的应用,它能够为微波炉提供智能化、定制化的操作功能。下面将对这个主题进行...

    weibolu.rar_单片机源程序_微波炉

    标题中的"weibolu.rar_单片机源程序_微波炉"暗示了这是一个与微波炉相关的项目,其中包含了单片机控制系统的源代码。这个压缩包文件可能包含了一个或多个ASM(汇编语言)文件,ASM是用于编写单片机程序的常见语言,...

    行业分类-电子-关于微波炉用器皿检测电路的说明分析.rar

    设计微波炉用器皿检测电路时,需要考虑以下因素: - 精度:电路应能准确区分不同的器皿,避免误报或漏报。 - 耐用性:电路需能承受厨房环境的温度变化和湿度,同时抵抗微波本身的侵蚀。 - 安全性:确保电路不会对...

    数电实验报告 vhdl 微波炉fpga分模块实现.pdf

    实验的目标是设计一个能够实现基本功能并具有拓展性的微波炉控制系统,以提升学生的数字电子技术实践能力。 首先,设计课题的基本要求包括:实现微波炉的时间设定、启动/停止功能、以及时间显示。提高要求可能涉及...

    电子政务-具有自愈性的塑制微波炉用电容器.zip

    标签“资料”表明这是一个包含相关知识文档的压缩包。文件“行业分类-电子政务-具有自愈性的塑制微波炉用电容器.pdf”可能是详细的报告或研究论文,涵盖了电子政务的发展趋势、自愈性电容器的技术原理、在微波炉领域...

    2024-2030全球及中国微波炉行业研究及十五五规划分析报告.docx

    - 消费者对于便捷性、智能化产品的需求不断增长,促使企业不断创新产品设计和服务模式。 #### 五、行业供应链分析 - **产业链结构**: - 微波炉产业链包括原材料供应商、制造商、分销商等多个环节。 - 关键原...

    基于全桥逆变电路的野外用微波炉

    移相控制电路采用了UCC3895芯片,这是一个改进版的UCC3875,具备电压模式和电流模式工作能力,拥有过流、过压、欠压保护以及软启动功能。通过电流互感器,磁控管的电流信号被引入到电流检测和过电流比较器,实现精确...

    Gaggenau嘉格纳BMP250&251烧烤微波炉说明书.pdf

    Gaggenau嘉格纳BMP250和BMP251型号的烧烤微波炉是一款集烹饪、烧烤和解冻功能于一体的高端厨房电器。这款设备设计精良,操作简便,为用户提供了一流的烹饪体验。以下是对手册中关键知识点的详细解释: 1. **安全...

    自己动手写操作系统(含源代码).part2

    有关操作系统的书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事,以作读者参考之用。 本书面向实践,通过具体...

    自己动手写操作系统(含源代码).part1

    有关操作系统的书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事,以作读者参考之用。 本书面向实践,通过具体...

    浅谈生活中的物理学运用.docx

    直到1965年,George Foster与Spencer共同改进设计,制造出耐用且价格适中的微波炉,这才开启了微波炉广泛应用于家庭的新篇章。 在使用微波炉时,我们需要注意一些误区。例如,不应预先将肉类加热至半熟,然后再加热...

Global site tag (gtag.js) - Google Analytics