PHP工厂模式

<?php

//抽象一个Pserson接口
interface Person
{
    //接口中的方法必须是public的
    public function showInfo();
}
//创建一个student类,实现接口Person
class Student implements Person
{
    //构造方法
    public $name;
    public $age;
    public function __construct($name,$age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    //实现接口中的方法
    public function showInfo()
    {
        echo '姓名是:'.$this->name.',年龄是:'.$this->age.',现在访问的是学生类中的方法!';
    }
}
//创建一个教师类,实现Person接口
class Teacher implements Person
{
    //构造方法
    public $name;
    public $job;
    public function __construct($name,$job)
    {
        $this->name = $name;
        $this->job = $job;
    }

    public function showInfo()
    {
        echo '姓名是:'.$this->name .',职位是:'.$this->job.',访问的是teacher类中的方法!';
    }
}
//使用工厂模式生成实例
class PersonFactory
{
    public static function creat($person_type,...$arguements)
    {
        $class_name = ucfirst($person_type);
        if(class_exists($class_name)){
            return new $class_name(...$arguements);
        }else{
            throw new Exception($class_name,1);
        }
    }
}

$stu1 = PersonFactory::creat('student','玲的','18');
echo $stu1->showInfo();
echo '<br>';

$stu2 = PersonFactory::creat('student','回的','25');
echo $stu2->showInfo();
echo '<br>';

$teacher1 = PersonFactory::creat('teacher','赵老师','语文老师');
echo $teacher1->showInfo();
echo '<br>';
$teacher2 = PersonFactory::creat('teacher','张老师','体育老师');
echo $teacher2->showInfo();

  输出

姓名是:玲的,年龄是:18,现在访问的是学生类中的方法!
姓名是:回的,年龄是:25,现在访问的是学生类中的方法!
姓名是:赵老师,职位是:语文老师,访问的是teacher类中的方法!
姓名是:张老师,职位是:体育老师,访问的是teacher类中的方法!

  

posted @ 2019-12-19 17:46  专门写bug  阅读(68)  评论(0编辑  收藏  举报