什么是工厂模式?
由工厂类根据参数来决定创建出哪一种产品类的实例;
工厂类是指包含了一个专门用来创建其他对象的方法的类。 所谓按需分配,传入参数进行选择,返回具体的类。 工厂模式的最主要作用就是对象创建的封装、简化创建对象操作。
简单的说,就是调用工厂类的一个方法(传入参数)来得到需要的类;
工厂模式有什么用?
通常我们在使用类的时候都是直接new出来一个直接使用。但是随着程序的开发,和项目的迁移修改,逐渐会产生许多问题。比如说过于依赖程序中的某个类,或者某个代码片段。类太多,不知道如何正确的管理这些类库。不知道如何正确的处理后续的迭代。这时候就需要使用工厂模式了。
实例场景
程序中用的是sql扩展链接数据库,更换了环境,需要使用pdo链接数据库。怎么办?难道在把每个数据库类实例全部修改一下?
原来一些配置是从文件中读取的,但是现在把配置改为数据库存储的。怎么办?全部修改?
如果一开始就是用工厂模式就不会出现这个问题了。
简单实例
class MyObject{
//对象将从工厂返回
}
class MyFactory{
public static function factory(){
return new MyObject():
}
}
$instance=MyFactory::factory();
会员抽象工厂模式实例
//定义一个用户抽象类
abstract class member{
protected $name;
protected $password;
public function __construct($name,$password){
$this->name=$name;
$this->password=$password;
}
//抽象方法
abstract protected function getResult();
}
//继承抽象类时必须实现其抽象方法且该方法的可见性大于等于抽象类的抽象方法
class user extends member{
public function getResult(){
echo 'name:'.$this->name.';password:'.$this->password.';type:user<br>';
}
public function add($dosomething){
echo 'user:'.$this->name.'add '.$dosomething.'<br>';
}
}
class admin extends member{
public function getResult(){
echo 'name:'.$this->name.';password:'.$this->password.';type:admin<br>';
}
public function add($dosomething){
echo 'admin:'.$this->name.'add '.$dosomething.'<br>';
}
}
//定义一个工厂类
class Factory{
//保存实例
private static $obj;
public static function CreateOperation($type,$name,$password){
//返回不同的对象
self::$obj=new $type($name,$password);
return self::$obj;
}
}
//使用
$obj=Factory::CreateOperation("admin","id","pass");
$obj->getResult();
$obj->add("66666");
$obj=Factory::CreateOperation("user","id","pass");
$obj->getResult();
$obj->add("66666");
发表评论
0 条评论