Correction status:qualified
Teacher's comments:
5月9日作业
代码;
1.apple.php
<?php /** * 单例模式:一个苹果类仅允许创建一个实例 */ class Apple { //必须先声明一个静态私有属性:用来保存当前苹果类的实例 private static $guoguang = null; //保存用户的自定义苹果参数 private $attr = []; //构造器私有化:禁止从类外部实例化 private function __construct(){} //克隆方法私有化:禁止从外部克隆对象 private function __clone(){} //因为用静态属性返回类实例,而只能在静态方法使用静态属性 //所以必须创建一个静态方法来生成当前类的唯一实例 public static function getGuoguang() { //检测当前类属性$guoguang是否已经保存了当前类的实例 if (self::$guoguang == null) { //如果没有,则创建当前类的实例 self::$guoguang = new self(); } //如果已经有了当前类实例,就直接返回,不要重复创建类实例 return self::$guoguang; } //设置配置项 public function set($name, $value) { $this->setting[$name] = $value; } //读取配置项 public function get($name) { return $this->setting[$name]; } } //实例化Config类 $obj1 = Apple::getGuoguang(); $obj2 = Apple::getGuoguang(); var_dump($obj1); echo '<hr>'; var_dump($obj2); $obj1->set('山东','胶州半岛'); echo '<hr>'; echo $obj1->get('山东');
点击 "运行实例" 按钮查看在线实例
2.company.php
<?php /* * 工厂模式:用于创建多种类型的多个实例对象 */ //声明公司类 class Company { //声明静态方法company,根据公司经营不同,创建不同公司类的实例 public static function create($type,array $modle=[]) { //检测形状? switch ($type) { //长方形 case 'trade': return new Trade($modle[0],$modle[1]); break; //三角形 case 'service': return new Service($modle[0],$modle[1]); break; } } } //声明贸易类 class Trade { private $pc; //电脑 private $mobile; //手机 public function __construct($pc,$mobile) { $this->pc = $pc; $this->mobile = $mobile; } //电脑、手机总价 public function tprice() { return $this->pc+$this->mobile; } } //声明服务类 class service { private $repair; //维修 private $replace; //更换 public function __construct($repair,$replace) { $this->repair = $repair; $this->replace = $replace; } //服务类总价 public function sprice() { return $this->repair+$this->replace; } } //使用静态方法来实例贸易类,而不是用传统的new 关键字 //并根据类型参数的不同,来实例化不同的类,生成不同的对象 $trade = Company::create('trade',[2100,3500]); echo '电脑和手机的总价是:'.$trade->tprice(); echo '<hr>'; $service = Company::create('service',[120,260]); echo '维修和更换的总价是:'.$service->sprice();
点击 "运行实例" 按钮查看在线实例