🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
工厂模式,属于创建型模式,它提供了创建对象的最佳方式,在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 * 定义一个创建对象的接口,让子类自己决定去实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 * 工厂模式是一种类,它具有为您创建对象的某些方法,可以使用工厂类创建对象,而不直接使用new,如果需要更改所创建的对象类型,只需要修改工厂类即可。 ``` <?php interface Drink{ function getDrinkName(); } class AppleDrink implements Drink{ function getDrinkName() { echo '苹果味饮料'; } } class BananaDrink implements Drink{ function getDrinkName() { echo '香蕉味饮料'; } } interface FruitFactory{ function makeDrink(); } class AppleFactory implements FruitFactory{ function makeDrink() { return new AppleDrink(); } } class BananaFactory implements FruitFactory{ function makeDrink() { return new BananaDrink(); } } $appleFactory = new AppleFactory(); $apple = $appleFactory->makeDrink(); $apple->getDrinkName(); $bananaFactory = new BananaFactory(); $banana = $bananaFactory->makeDrink(); $banana->getDrinkName(); ``` 当需要增加新的产品时,只需要添加新的工厂类即可,不需要改动原来的代码。 工厂模式,它是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现开闭原则,实现了对扩展开放,对更改关闭。其次实现更复杂的层次结构,可以应用于产品结果复杂的场合。工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。