php之工厂模式

工厂模式概念

工厂模式是一种类,它具备为您建立对象的某些方法。您能够使用工厂类建立对象,而不直接使用 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 "<br/>";
$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 "<br/>";
$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.抽象工厂建立相关的对象家族,而不须要依赖他们的具体类code

相关文章
相关标签/搜索