php 工厂模式 实际应用,PHP设计模式应用实例(多态模式,工厂模式,命令模式)...

1、多态模式

class pub {

protected function working() {

echo '这是一个可以重写的方法';

}

}

class student extends pub {

public function working() {

echo '学生在学习';

}

}

class teacher extends pub {

public function working() {

echo '老师在讲课';

}

}

public function doing($obj) {

if ($obj instanceof pub) {

$obj->working();

} else {

echo '没有这个对象!';

}

}

doing(new student());

doing(new teacher());

?>

2、工厂模式:根据传入的类型名实例化对象,只负责生成对象,而不负责对象的具体内容

//定义一个适配器接口

interface Db_Adapter{

public function connect();

public function query();

}

//定义MySQL数据库操作类

class Db_Adapter_Mysql implements Db_Adapter{

public function connect(){

echo "mysql数据库连接操作";

}

public function query(){

echo "mysql数据库查询操作";

}

}

//定义SQLite数据库操作类

class Db_Adapter_Sqlite implements Db_Adapter{

public function connect(){

echo "sqlite数据库连接操作";

}

public function query(){

echo "sqlite数据库查询操作";

}

}

//定义工厂类

class sqlFactory{

public static function factory($type) {

$classname = 'Db_Adapter_'.$type;

return new $classname;

}

}

//调用

$db = sqlFactory::factory('Mysql');

$db = sqlFactory::factory('Sqlite');

3、命令模式

//定义厨师类,命令接受者与执行者

class cook{

public function meal() {

echo "西红柿炒鸡蛋
";

}

public function drink() {

echo "紫菜蛋花汤
";

}

public function ok() {

echo "完成
";

}

}

//命令接口

interface command{

public function execute();

}

//模拟服务员与厨师的过程

class mealCommand implements command{

private $cook;

public function __construct($cook){

$this->cook = $cook;

}

public function execute(){

$this->cook->meal();

}

}

class drinkCommand implements command{

private $cook;

public function __construct($cook){

$this->cook = $cook;

}

public function execute(){

$this->cook->drink();

}

}

//模拟顾客与服务员的过程

class cookControl{

private $mealCommand;

private $drinkCommand;

public function addCommond($mealCommand,$drinkCommand) {

$this->mealCommand = $mealCommand;

$this->drinkCommand = $drinkCommand;

}

public function callMeal(){

$this->mealCommand->execute();

}

public function callDrink(){

$this->drinkCommand->execute();

}

}

//实现命令模式

$cookControl = new cookControl();

$cook = new cook();

$mealCommand = new mealCommand($cook);

$drinkCommand = new drinkCommand($cook);

$cookControl->addCommond($mealCommand,$drinkCommand);

$cookControl->callMeal();

$cookControl->callDrink();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值