资讯专栏INFORMATION COLUMN

php之工厂模式

tainzhi / 1909人阅读

摘要:工厂模式概念工厂模式是一种类,它具有为您创建对象的某些方法。使用该工厂的所有代码会自动更改。

工厂模式概念

工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

3中不同的工厂模式

1.简单工厂模式(静态工厂模式):通过静态方法来创建对象
2.工厂模式:定义一个对象接口,让子类来决定具体的对象实例化
3.抽象工厂模式:使用对象组合来,对象的创建被实现在工厂接口所暴露的出来的方法

代码实例
/**
 * 简单工厂模式:通过静态方法来实现对象创建
 * Interface Drink
 */
interface Drink{
    public function buy();
}

class Coffee implements Drink {

    public function buy(){
        echo "i want to coffee";
    }

}

class Cola implements Drink{

    public function buy()
    {
        echo "i want to cola";
    }

}

class DrinkStore{

    public static function orderCoffee(){
        return new Coffee();
    }

    public static function  orderCola(){
         return new Cola();
    }
}

$man = DrinkStore::orderCoffee();
$man->buy();//结果输出 i want to coffee
echo "
"; $woman = DrinkStore::orderCola(); $woman->buy();//结果输出 i want to cola
/**
 * 工厂模式:通过定义一个对象的接口,让子类来实现对象创建
 * Interface Drink
 */
interface Drink{
    public function buy();
}

class Coffee implements Drink {

    public function buy(){
        echo "i want to coffee";
    }

}

class Cola implements Drink{

    public function buy()
    {
        echo "i want to cola";
    }

}

interface CreateDrink{
    public function create();
}

class CoffeeFactory implements CreateDrink{
    public function create()
    {
        return new Coffee();
    }
}

class ColaFactory implements CreateDrink{
    public function create()
    {
        return new Cola();
    }
}


$coffee_factory = new CoffeeFactory();
$man = $coffee_factory->create();
$man->buy();//结果输出 i want to coffee
echo "
"; $cola_factory = new ColaFactory(); $woman = $cola_factory->create(); $woman->buy();//结果输出 i want to cola
/**
 * 抽象工厂模式:提供一个创建一系列的相关的或者相互依赖的对象接口
 * 注意:这里和工厂方法的区别是:一系列,而工厂方法则是一个
 * Interface Drink
 */
interface Drink{
    public function buy();
}

class CoffeeHot implements Drink {

    public function buy(){
        echo "i want to hot coffee";
    }

}

class CoffeeCold implements Drink {

    public function buy(){
        echo "i want to cold coffee";
    }

}

class ColaHot implements Drink{

    public function buy()
    {
        echo "i want to hot cola";
    }

}

class ColaCold implements Drink{

    public function buy()
    {
        echo "i want to cold cola";
    }

}

interface SuperFactory{
    public function createHot();
    public function createCold();
}

class CoffeeFactory implements SuperFactory {
    public function createHot()
    {
        return new CoffeeHot();
    }

    public function createCold()
    {
        return new CoffeeCold();
    }
}

class ColaFactory implements SuperFactory{
    public function createCold()
    {
        return new ColaCold();
    }

    public function createHot()
    {
        return new ColaHot();
    }
}

$coffee_factory = new CoffeeFactory();
$man = $coffee_factory->createHot();
$man->buy();
设计原则

1.多用组合,少用继承
2.针对接口编程,不针对实现编程
3.为交互对象之间的松耦合设计而努力
4.类应该对扩展开发,对修改关闭
5.依赖抽象,不要依赖具体类

要点

1.所有工厂都是用来封装对象的创建
2.简单工厂,虽然不是真正的设计模式,但仍不失为一种简单的方法,可以将客户程序从具体的类中解耦
3.工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
4.抽象工厂使用对象组合,对象的创建被是现在工厂接口所暴露出来的地方中
5.所用工厂模式都在通过减少应用程序具体类之间的依赖所促进松耦合
6.工厂方法允许类将实例化延迟到子类中
7.抽象工厂创建相关的对象家族,而不需要依赖他们的具体类

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22536.html

相关文章

  • PHP面试常考设计模式——工厂模式

    摘要:工厂模式其实可以划分为简单工厂模式工厂方法模式抽象工厂模式等。简单工厂模式介绍简单工厂模式又称为静态工厂方法模式,它属于类创建型模式。此模式是对工厂方法模式的进一步扩展。 你好,是我琉忆,PHP程序员面试笔试系列图书的作者。 本周(2019.3.11至3.15)的一三五更新的文章如下: 周一:PHP面试常考之设计模式——工厂模式周三:PHP面试常考之设计模式——建造者模式周五:PHP...

    Jiavan 评论0 收藏0
  • 优才公开课笔记:php设计模式 (二)工厂模式

    摘要:但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。 最近开展了三次设计模式的公开课,现在来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式。 设计模式的一般介绍在第一篇文章讲了,这里就不重复。 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实...

    aisuhua 评论0 收藏0
  • php 设计模式工厂模式、单例模式、注册树模式

    摘要:的设计模式有很多种,本文取最简单的三种模式工厂模式单例模式和注册树模式进行简单的讲解。文件创建完后,咱们回到单元测试文件文件再执行一下单元测试命令发现,也能返回成功,这样的话我们就能很方便的修改任何驱动了。 php 设计模式之工厂模式、单例模式、注册树模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具...

    liangzai_cool 评论0 收藏0
  • PHP设计模式工厂模式

    摘要:根据抽象程度的不同,工厂模式分为三种简单工厂模式工厂方法模式抽象工厂模式讲解简单工厂模式简单工厂模式又称静态工厂方法模式,之所以可以这么说,是因为简单工厂模式是通过一个静态方法来创建对象的。他可以解决简单工厂模式中的封闭开放原则问题。 概念 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。 使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工...

    imtianx 评论0 收藏0
  • PHP 设计模式工厂模式 (静态工厂模式)

    摘要:工厂模式由工厂类根据参数来决定创建出哪一种产品类的实例。工厂类是指包含了一个专门用来创建其他对象的方法的类。工厂模式的最主要作用就是对象创建的封装简化创建对象操作。 ### 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例。工厂类是指包含了一个专门用来创建其他对象的方法的类。所谓按需分配,传入参数进行选择,返回具体的类。工厂模式的最主要作用就是对象创建的封装、简化创建对象操作...

    kviccn 评论0 收藏0
  • PHP 设计模式二——工厂模式

    摘要:连接邮件服务器的类可以连接邮件服务器的方法有,此时可以写一个工厂类负责实例化这几种连接方法,如果某一天对方增加了连接方法,那么直接在工厂类里做相应的修改即可。扩展性高,如果想增加一个产品,只要扩展一个工厂类或者是修改工厂的生产过程即可。 定义 工厂模式的使用频率比较高。它的定义为:定义一个类,该类主要负责系统的去实例化一些其它的类。通俗点说就是,你告诉我你需要哪个类的实例即可,其它的你...

    cc17 评论0 收藏0

发表评论

0条评论

tainzhi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<