工厂模式

简单工厂

//抽象产品
interface Person
{
    public function getName(){}
}
//具体产品实现
class Teacher implements Person{
    public function getName(){
        return '老师';
    }
}
class Student implements Person{
    public function getName(){
        return '学生';
    }
}
//简单工厂
class SimpleFactory{
    public static function getPerson($type){
        $person=null;
        if ($type=='student') {
            $person=new student();
        }elseif ($person=='teacher') {
            $person=new Teacher();
        }
        return $person;
    }
}
//简单工厂调用
class SimpleClient{
    function main(){
        // 如果不用工厂模式,则需要提前指定具体类
        // $person=new Teacher();
        // echo $person->getName();
        // $person=new Student();
        // echo $person->getName();
        
        //用工厂模式,则不需要知道对象由什么产生,交给工厂去决定
        $person=SimpleFactory::getPerson('teacher');
        echo $person->getName();
        $person=SimpleFactory::getPerson('student');
        echo $person->getName();
    }
}


 抽象工厂工行

 

interface Grade{
    function getYear();
}
class Grade1 implements Grade{
    public function getYear(){
        return '2019年';
    }
}
class Grade2 implements Grade{
    public function getYear(){
        return '2020年';
    }
}
//抽象产品
interface Person {
    public function getName(); 
}
//具体产品实现
class Teacher implements Person {
    public function getName() {
        return "老师\n";
    }
}
class Student implements Person {
    public function getName() {
        return "学生\n";
    }
}
//抽象工厂
interface AbstractFactory{
    function getPerson();
    function getGrade();
}
//具体工厂可以产生每个产品线产品
class Grade1StudentFactory implements AbstractFactory{
    public function getPerson(){
        return new Student();
    }
    public function getGrade(){
        return new Grade1();
    }
}
class Grade2TeacherFactory implements AbstractFactory{
    public function getPerson(){
        return new Teacher();
    }
    public function getGrade(){
        return new Grade2();
    }
}
class Grade2StudentFactory implements AbstractFactory{
    public function getPerson(){
        return new Student();
    }
    public function getGrade(){
        return new Grade2();
    }
}
class Grade1TeacherFactory implements AbstractFactory{
    public function getPerson(){
        return new Teacher();
    }
    public function getGrade(){
        return new Grade1();
    }
}
//抽象工厂调用
class ClientFactory{
    public function printinfo($factory){
        echo $factory->getGrade()->getYear().$factory->getPerson()->getName();
    }
    public static function main(){
        $client=new ClientFactory();
        $factory=new Grade1TeacherFactory();
        $client->printinfo($factory);
        $factory=new Grade2TeacherFactory();
        $client->printinfo($factory);
        $factory=new Grade2StudentFactory();
        $client->printinfo($factory);
        $factory=new Grade1StudentFactory();
        $client->printinfo($factory);
    }
}
ClientFactory::main();


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值