版本1.0
<?php
/**
* Created by Victor
* User: Victor
* Date: 2018/3/16
* Time: 9:54
*/
/**
* 產品抽象類
* Class AppEncoder
* Created by Victor
*/
abstract class AppEncoder
{
abstract function encode();
}
class BloggsAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in BloggsCal format';
}
}
class MegaAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in MegaCal format';
}
}
/**
*產品生產類---工廠抽象類
*/
abstract class CommsManger
{
public function getAppEncoder()
{
return new BloggsAppEncoder();
}
}
版本2.0
<?php
/**
* Created by Victor
* User: Victor
* Date: 2018/3/16
* Time: 9:54
*/
/**
* 產品抽象類
* Class AppEncoder
* Created by Victor
*/
abstract class AppEncoder
{
abstract function encode();
}
class BloggsAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in BloggsCal format';
}
}
class MegaAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in MegaCal format';
}
}
/**
*產品生產類---工廠抽象類
*/
class CommsManger
{
const BLOGGS =1;
const MEGA =2;
private $_mode;
public function __construct($mode)
{
$this->_mode = $mode;
}
public function getAppEncoder()
{
switch ($this->_mode)
{
case self::BLOGGS:
return new BloggsAppEncoder();
break;
case self::MEGA:
return new MegaAppEncoder();
break;
}
}
}
//調用的
$comms = new CommsManger(CommsManger::BLOGGS);
$appEncoder = $comms->getAppEncoder();
print_r($appEncoder->encode());
版本三:
<?php
/**
* Created by Victor
* User: Victor
* Date: 2018/3/16
* Time: 9:54
*/
/**
* 產品抽象類
* Class AppEncoder
* Created by Victor
*/
abstract class AppEncoder
{
abstract function encode();
}
class BloggsAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in BloggsCal format';
}
}
class MegaAppEncoder extends AppEncoder
{
public function encode()
{
return 'Appointment data encode in MegaCal format';
}
}
abstract class CommsAppEncoder
{
abstract function getEncoder() : AppEncoder;//方法返回類型約束
abstract function getTexter();//新的功能
}
class BlogComms extends CommsAppEncoder
{
public function getEncoder() : AppEncoder
{
// TODO: Implement getEncoder() method.
return new BloggsAppEncoder();
}
public function getTexter()
{
// TODO: Implement getTexter() method.
return 'Bloggs Texter';
}
}
class Mega extends CommsAppEncoder
{
public function getEncoder() : AppEncoder
{
// TODO: Implement getEncoder() method.
return new MegaAppEncoder();
}
public function getTexter()
{
// TODO: Implement getTexter() method.
return 'Mega Texter';
}
}