[笔试题] 用 PHP 写一个微波炉
在网上看到一个笔试题,感觉挺有意思的,然后我尝试着解一解,欢迎各位大佬指正。
代码题(用OOP的思想编码,注意代码规范) 写出你的思路,最好有代码
用php写一个微波炉,注意物品正加热时不能开门,带皮带壳食物不能被加热。
感谢@MrJing、@minororange两位大佬的建议,更进一步理解了OOP,现更新第二版。
第二版
<?php
/**
* Created by PhpStorm.
* User: arun
* Date: 2019-04-30
* Time: 16:10
*/
/**
* 厨房用具
* Interface kitchenWare
*/
interface kitchenWare {
/**
* 加工食材
* @param Food $food
* @return mixed
*/
public function process(Food $food);
/**
* 是否正在加工
* @return mixed
*/
public function hasProcess();
}
/**
* 微波炉
* Class MicrowaveOven
*/
class MicrowaveOven implements kitchenWare
{
/**
* 是否加热中
* @var bool
*/
protected $is_heat = false;
/**
* @param Food $food
* @return mixed|string
*/
public function process(Food $food)
{
if ($this->hasProcess()) {
return '已有食物在加热,无法打开';
} else {
if ($food->hasShuck() || $food->hasPericarp()) {
return '食物带壳或者带皮,无法进行加热';
} else {
$this->is_heat = true;
return '食物加热中,加热完成即可取出';
}
}
}
/**
* 是否正在加工
* @return bool|mixed
*/
public function hasProcess()
{
return $this->is_heat;
}
}
/**
* 烤箱
* Class Oven
*/
class Oven implements kitchenWare
{
/**
* 是否烧烤中
* @var bool
*/
protected $is_heat = false;
/**
* @param Food $food
* @return mixed|string
*/
public function process(Food $food)
{
if ($this->is_heat) {
return '已有食物在烤制,无法打开';
} else {
if ($food->hasShuck()) {
return '食物带壳,无法进行烤制';
} else {
$this->is_heat = true;
return '食物烤制中,完成即可取出';
}
}
}
/**
* 是否正在加工
* @return bool|mixed
*/
public function hasProcess()
{
return $this->is_heat;
}
}
/**
* 食物
* Class Food
*/
class Food
{
/**
* 是否带壳
* @var bool
*/
protected $is_shuck = false;
/**
* 是否带皮
* @var bool
*/
protected $is_pericarp = false;
/**
* Food constructor.
* @param bool $is_shuck
* @param bool $is_pericarp
*/
public function __construct(bool $is_shuck, bool $is_pericarp)
{
$this->is_shuck = $is_shuck;
$this->is_pericarp = $is_pericarp;
}
/**
* 判断是否带壳
* @return bool
*/
public function hasShuck()
{
return $this->is_shuck;
}
/**
* 判断是否带皮
* @return bool
*/
public function hasPericarp()
{
return $this->is_pericarp;
}
}
/**
* 烹饪
* Class Cooking
*/
class Cooking
{
/**
* @var kitchenWare
*/
protected $kitchenWare;
/**
* Cook constructor.
* @param kitchenWare $kitchenWare
*/
public function __construct(kitchenWare $kitchenWare)
{
$this->kitchenWare = $kitchenWare;
}
/**
* 烹饪食物
* @param Food $food
* @return mixed
*/
public function cooking(Food $food)
{
$data = $this->kitchenWare->process($food);
return $data;
}
}
/**
* 微波炉加热
* @return mixed
*/
function test()
{
$cooking = new Cooking(new MicrowaveOven());
$food = new Food(false, false);
$result = $cooking->cooking($food);
$result2 = $cooking->cooking($food);
var_dump($result, $result2);
}
/**
* 烤箱烤制
* @return mixed
*/
function test2()
{
$cooking = new Cooking(new Oven());
$food = new Food(false, true);
$result = $cooking->cooking($food);
$result2 = $cooking->cooking($food);
var_dump($result, $result2);
}
test();
test2();
第一版
<?php
/**
* Created by PhpStorm.
* User: arun
* Date: 2019-04-30
* Time: 16:10
*/
/**
* 厨房用具
* Interface kitchenWare
*/
interface kitchenWare {
/**
* 加工食材
*
* @param $food
* @return mixed
*/
public function process($food);
}
/**
* 微波炉
* Class MicrowaveOven
*/
class MicrowaveOven implements kitchenWare
{
/**
* 是否加热中
* @var bool
*/
protected $is_heat = false;
public function process($food)
{
if ($this->is_heat) {
return '已有食物在加热,无法打开';
} else {
if ($food['is_shuck'] || $food['is_pericarp']) {
return '食物带壳或者带皮,无法进行加热';
} else {
$this ->is_heat = true;
return '食物加热中,加热完成即可取出';
}
}
}
}
/**
* 烤箱
* Class Oven
*/
class Oven implements kitchenWare
{
/**
* 是否烧烤中
* @var bool
*/
protected $is_heat = false;
public function process($food)
{
if ($this->is_heat) {
return '已有食物在烤制,无法打开';
} else {
if ($food['is_shuck']) {
return '食物带壳,无法进行烤制';
} else {
$this ->is_heat = true;
return '食物烤制中,完成即可取出';
}
}
}
}
/**
* 食物
* Class Food
*/
class Food
{
/**
* 是否带壳
* @var bool
*/
protected $is_shuck = false;
/**
* 是否带皮
* @var bool
*/
protected $is_pericarp = false;
/**
* Food constructor.
* @param bool $is_shuck
* @param bool $is_pericarp
*/
public function __construct(bool $is_shuck, bool $is_pericarp)
{
$this->is_shuck = $is_shuck;
$this->is_pericarp = $is_pericarp;
}
public function getFood()
{
return [
'is_shuck' => $this->is_shuck,
'is_pericarp' => $this->is_pericarp,
];
}
}
/**
* 烹饪
* Class Cooking
*/
class Cooking
{
/**
* @var kitchenWare
*/
protected $kitchenWare;
/**
* Cook constructor.
* @param kitchenWare $kitchenWare
*/
public function __construct(kitchenWare $kitchenWare)
{
$this->kitchenWare = $kitchenWare;
}
/**
* 烹饪食物
* @param $food
* @return mixed
*/
public function cooking($food)
{
$data = $this->kitchenWare->process($food);
return $data;
}
}
/**
* 微波炉加热
* @return mixed
*/
function test()
{
$cooking = new Cooking(new MicrowaveOven());
$food = new Food(false, false);
$result = $cooking->cooking($food->getFood());
$result2 = $cooking->cooking($food->getFood());
var_dump($result, $result2);
}
/**
* 烤箱烤制
* @return mixed
*/
function test2()
{
$cooking = new Cooking(new Oven());
$food = new Food(false, true);
$result = $cooking->cooking($food->getFood());
$result2 = $cooking->cooking($food->getFood());
var_dump($result, $result2);
}
test();
test2();
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: