设计模式-创建者模式
来源:互联网 发布:智能聊天机器人java 编辑:程序博客网 时间:2024/04/30 21:11
创建者模式
将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示
Demo
abstract class carModel{
//这里存储所有组装车需要的零件
public $spareParts = array();
//车的名字
public $carName = "";
//增加轮子部件
public abstract function addLunzi($xinghao);
//增加外壳部件
public abstract function addWaike($xinghao);
//增加发动机部件
public abstract function addFadongji($xinghao);
//获取车,并给车取名字
final public function getCar($carName){
if($this->spareParts){
$this->carName = $carName;
//$k 代表部件名字
//$v 代表型号
foreach($this->spareParts as $k=>$v){
$actionName = "add" . $k;
$this->$actionName($v);
}
}else{
throw new Exception("没有汽车部件");
}
}
}
//定义具体的产品
class bmwCarModel extends carModel{
public $spareParts = array();
public $carName = "";
public function addLunzi($xinghao){
echo "宝马".$this->carName."的轮子,型号是" . $xinghao . "\n";
}
public function addWaike($xinghao){
echo "宝马".$this->carName."的外壳,型号是" . $xinghao . "\n";
}
public function addFadongji($xinghao){
echo "宝马".$this->carName."的发动机,型号是" . $xinghao . "\n";
}
}
//定义具体的产品
class benziCarModel extends carModel{
public $spareParts = array();
public $carName = "";
public function addLunzi($xinghao){
echo "奔驰".$this->carName."的轮子,型号是" . $xinghao . "\n";
}
public function addWaike($xinghao){
echo "奔驰".$this->carName."的外壳,型号是" . $xinghao . "\n";
}
public function addFadongji($xinghao){
echo "奔驰".$this->carName."的发动机,型号是" . $xinghao . "\n";
}
}
//定义建造者
abstract class carBuilder{
public abstract function setSpareParts($partsName , $xinghao);
public abstract function getCarModel($name);
}
class bmwBuilder extends carBuilder{
private $bmwModel;
public function __construct(){
$this->bmwModel = new bmwCarModel();
}
public function setSpareParts($partsName , $xinghao){
$this->bmwModel->spareParts[$partsName] = $xinghao;
}
public function getCarModel($name){
$this->bmwModel->getCar($name);
}
}
class benziBuilder extends carBuilder{
private $benziModel;
public function __construct(){
$this->benziModel = new benziCarModel();
}
public function setSpareParts($partsName , $xinghao){
$this->bmwModel->spareParts[$partsName] = $xinghao;
}
public function getCarModel($name){
$this->bmwModel->getCar($name);
}
}
//模拟客户端调用
//创建一辆宝马车,取名字为宝马x1
$bmwBuilder = new bmwBuilder();
$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子1号');
$bmwBuilder->setSpareParts('Waike' , '牛逼外壳1号');
$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机1号');
$bmwBuilder->getCarModel("宝马x1");
echo '</br>';
$bmwBuilder->getCarModel("宝马x1"); //连续创建两个宝马x1
echo '</br>';
//再创建一个宝马 没有外壳 取名为 宝马s5
$bmwBuilder = new bmwBuilder();
$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子2号');
$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机2号');
$bmwBuilder->getCarModel("宝马s5");
echo '</br>';
$bmwBuilder->getCarModel("宝马s5"); //连续创建两个宝马x1
- 设计模式--创建者模式
- 设计模式-创建者模式
- 创建者设计模式
- 设计模式系列-创建者模式
- 设计模式之创建者模式
- 设计模式-创建者模式(Builder)
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式笔记-创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式-创建者模式总结
- 设计模式之创建者模式
- JAVA设计模式之创建者模式
- 设计模式学习--Buider pattern(创建者模式)
- yarn的基本使用
- Android 获取手机IMEI 和 IMSI 号
- 安卓开发艺术探索
- c#如何将子窗体显示到父窗体的容器(panel)控件中
- 类与对象
- 设计模式-创建者模式
- IT管理人才必须具备的十大能力
- 什么是状态机
- 便携式摄像机
- 中英文对照 —— 游戏
- Java--数据类型
- android assets复制到sd卡
- 89. Gray Code \ 51. N-Queens \ 52. N-Queens II
- MySQL Explain详解