工厂模式代码
<h2>简单工厂模式</h2>
<pre><code class="language-php">interface People {
public function eat();
}
class Man implements People{
public function eat() {
echo '男人吃饭比较快<br>';
}
}
class Women implements People {
public function eat() {
echo '女人吃饭比较慢!<br>';
}
}
class SimpleFactoty {
// 简单工厂里的静态方法
static public function createMan() {
return new Man();
}
static public function createWomen() {
return new Women();
}
}
$man = SimpleFactoty::createMan();
$man->eat();
$man = SimpleFactoty::createWomen();
$man->eat();</code></pre>
<h2>工厂方法模式</h2>
<pre><code class="language-php">interface People {
public function eat();
}
class Man implements People{
public function eat() {
echo '男人吃饭比较快<br>';
}
}
class Women implements People {
public function eat() {
echo '女人吃饭比较慢!<br>';
}
}
interface CreateMan {
// 注意,这里是和简单工厂本质区别所在,将对象的创建抽象成一个接口。
public function create();
}
class FactoryMan implements CreateMan{
public function create() {
return new Man();
}
}
class FactoryWomen implements CreateMan {
public function create() {
return new Women();
}
}
class Client {
// 简单工厂里的静态方法
public function test() {
$Factory = new FactoryMan;
$man = $Factory->create();
$man->eat();
$Factory = new FactoryWomen;
$man = $Factory->create();
$man->eat();
}
}
$f = new Client;
$f->test();
</code></pre>
<h2>抽象工厂模式</h2>
<pre><code class="language-php">interface People {
public function eat();
}
class AppleMan implements People{
public function eat() {
echo '男人:我喜欢吃苹果!<br>';
}
}
class OrangeMan implements People{
public function eat() {
echo '男人:我喜欢吃橘子!<br>';
}
}
class AppleWomen implements People {
public function eat() {
echo '女人:我也喜欢吃苹果!<br>';
}
}
class OrangeWomen implements People {
public function eat() {
echo '女人:我喜欢吃橘子!<br>';
}
}
interface CreateMan {
// 注意了,这里是本质区别所在,将对象的创建抽象成一个接口。
public function createApple(); //分为 内敛的和外向的
public function createOrange(); //内向
}
class FactoryMan implements CreateMan{
public function createApple() {
return new AppleMan();
}
public function createOrange() {
return new OrangeMan();
}
}
class FactoryWomen implements CreateMan {
public function createApple() {
return new AppleWomen();
}
public function createOrange() {
return new OrangeWomen();
}
}
class Client {
// 简单工厂里的静态方法
public function test() {
$Factory = new FactoryMan;
$man = $Factory->createApple();
$man->eat();
$man = $Factory->createOrange();
$man->eat();
$Factory = new FactoryWomen;
$man = $Factory->createApple();
$man->eat();
$man = $Factory->createOrange();
$man->eat();
}
}
$f = new Client;
$f->test();
</code></pre>