abstract class Operation{
protected $numA;
protected $numB;
public function __get($name){
if(array_key_exists($name,get_class_vars(__CLASS__))){
$this->$name;
}
}
public function __set($name,$value){
if(array_key_exists($name,get_class_vars(__CLASS__))){
$this->$name=$value;
}
}
abstract public function getResult();
}
class AddOperation extends Operation{
public function getResult(){
return $this->numA + $this->numB;
}
}
class minusOperation extends Operation{
public function getResult(){
return $this->numA - $this->numB;
}
}
一个类可以生成多个不同的实例
class{
public function get($str){
switch($str){
case 'add':
return new
AddOperation
();
break;
case 'minus':
return new
minusOperation
();
}
}
}
策略模式:
多个算法实现相同的功能,用一个上下文来实现
class Context{
private $operation;public function __construct($operation){$this->operation = $operation;}public function getResult(){return $this->operation->getResult();}}单一职责:
每个类功能负责单一职责开放-封闭原则:原则上每个类可扩展不修改依赖倒转原则:每个功能依赖商定好的的接口,针对抽象编程,而不针对细节编程