简单工厂
//抽象产品
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();