ホームページ >バックエンド開発 >PHPチュートリアル >PHP オブジェクト指向開発 - デコレーション モード

PHP オブジェクト指向開発 - デコレーション モード

黄舟
黄舟オリジナル
2016-12-29 11:18:271474ブラウズ

オンラインで携帯電話を購入したことのある友人は、販売者が通常、携帯電話にいくつかのパッケージを合わせて、顧客が自由に選択できることを知っていますが、現在、携帯電話を販売する店があり、すべての携帯電話に対応する3つのパッケージが4999元です。 、ベアメタルパッケージは4,999元で、標準パッケージは200元割引され、フル構成は標準パッケージに100元追加されます。これを実装するにはPHPを使用します。

<?php
abstract class mobile{
	abstract public function getInfo();
	abstract public function getPrice();
}

class iphone extends mobile{

	private $price=4999;
	private $info=&#39;官方标配(手机+电源+数据线+耳机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	
	public function getPrice(){
		return $this->price;
	}

}

class bareIphone extends iphone{
	
	private $info=&#39;裸机(手机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return parent::getPrice()-200;
	}

}

class fullSetIphone extends iphone{
	
	private $info=&#39;套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return parent::getPrice()+100;
	}
	
}

class lumia920 extends mobile{

	private $price=4399;
	private $info=&#39;官方标配(手机+电源+数据线+耳机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	
	public function getPrice(){
		return $this->price;
	}

}

class bareLumia920 extends lumia920{
	
	private $info=&#39;裸机(手机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return parent::getPrice()-200;
	}

}

class fullSetLumia920 extends lumia920{
	
	private $info=&#39;套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return parent::getPrice()+100;
	}
	
}

$iphone=new fullSetIphone();
echo &#39;iphone全套配置价格为:&#39;.$iphone->getPrice().&#39;,配置为:&#39;.$iphone->getInfo();
echo &#39;<br>&#39;;
$lumia920=new bareLumia920();
echo &#39;lumia920全套配置价格为:&#39;.$lumia920->getPrice().&#39;,配置为:&#39;.$lumia920->getInfo();
?>

iPhone と Lumia920 にそれぞれ 3 つのパッケージを設定しましたが、これを見ると、iPhone と Lumia920 のベアメソッドとフルセットメソッドがまったく同じであることがわかり、ある種のカップリングが形成されます。 bare メソッドと fullSet メソッドを組み合わせます。これにはデコレーション モードが必要です。コードは次のとおりです:

<?php
abstract class mobile{
	abstract public function getInfo();
	abstract public function getPrice();
}

class iphone extends mobile{

	private $price=4999;
	private $info=&#39;官方标配(手机+电源+数据线+耳机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	
	public function getPrice(){
		return $this->price;
	}

}

class lumia920 extends mobile{

	private $price=4399;
	private $info=&#39;官方标配(手机+电源+数据线+耳机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	
	public function getPrice(){
		return $this->price;
	}

}

//装饰类
abstract class decorateIphone extends mobile{

	protected $iphone;
	
	public function __construct(mobile $iphone){
		$this->iphone=$iphone;
	} 

}

class bare extends decorateIphone{
	
	private $info=&#39;裸机(手机)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return $this->iphone->getPrice()-200;
	}

}

class fullSet extends decorateIphone{
	
	private $info=&#39;套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)&#39;;
	
	public function getInfo(){
		return $this->info;
	}
	public function getPrice(){
		return $this->iphone->getPrice()+100;
	}
	
}

$iphone=new fullSet(new iphone());
echo &#39;iphone全套配置价格为:&#39;.$iphone->getPrice().&#39;,配置为:&#39;.$iphone->getInfo();
echo &#39;<br>&#39;;
$lumia920=new bare(new lumia920());
echo &#39;lumia920裸机价格为:&#39;.$lumia920->getPrice().&#39;,配置为:&#39;.$lumia920->getInfo();
?>

上記は PHP オブジェクト指向開発 - デコレーション モードの内容です。 PHP 中国語 Web サイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。