PHP学习心得


工厂模式说明比较

<h1>简单工厂模式、工厂方法模式和抽象工厂模式比较</h1> <h3>什么需要工厂模式</h3> <ul> <li>工厂模式可以将对象的生产从直接 new 一个对象,改成通过调用一个工厂方法生产。 <ul> <li>这样的封装代码,需要修改 new 的对象时,不需要修改多处 new 语句,只需更改生产对象方法。</li> </ul></li> <li>若所需实例化的对象可选择来自不同的类,可省略if-else多层判断,给工厂方法传入对应的参数,利用多态性,实例化对应的类。</li> </ul> <h3>简单工厂模式</h3> <ul> <li>简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。</li> <li>简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂</li> <li>简单工厂又叫静态工厂方法模式,这样理解可以确定,简单工厂模式是通过一个静态方法创建对象的。</li> </ul> <h3>简单工厂优点</h3> <ul> <li>可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;</li> </ul> <h3>简单工厂缺点</h3> <ul> <li>可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,不符合OCP(开闭原则)的原则。</li> <li>简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。</li> </ul> <hr /> <h3>工厂方法模式</h3> <ul> <li>对比简单工厂模式的优点是,您可以将其子类用不同的方法来创建一个对象。</li> <li>这种模式是「真正」的设计模式, 因为他实现了 S.O.L.I.D 原则中「D」的 「依赖倒置」。</li> <li>这意味着工厂方法模式取决于抽象类,而不是具体的类。 这是与简单工厂模式和静态工厂模式相比的优势。</li> </ul> <hr /> <h3>抽象工厂模式</h3> <ul> <li>在不指定具体类的情况下创建一系列相关或依赖对象。提供一个创建一系列相关或相互依赖对象的接口。</li> <li>通常创建的类都实现相同的接口。 </li> <li>抽象工厂的客户并不关心这些对象是如何创建的,它只是知道它们是如何一起运行的。</li> <li>这里和工厂方法的区别是:一系列,而工厂方法则是一个</li> </ul> <hr /> <h3>区别</h3> <ul> <li><strong>简单工厂模式</strong> <ul> <li>用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力</li> </ul></li> <li><strong>工厂模式</strong> <ul> <li>用来生产同一等级结构中的固定产品。(支持增加任意产品) </li> </ul></li> <li><strong>抽象工厂</strong> <ul> <li>用来生产不同产品族的全部产品。</li> <li>对于增加新的产品,无能为力;支持增加产品族 </li> </ul></li> <li>以上三种工厂 <ul> <li>方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法</li> </ul></li> </ul> <h3>适用范围</h3> <ul> <li>简单工厂模式 <ul> <li>工厂类负责创建的对象较少,客户只知道传入工厂类的参数,对于如何创建对象不关心。</li> </ul></li> <li>工厂方法模式 <ul> <li>当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,当类将创建对象的职责委托给多个帮助子类中得某一个, 并且你希望将哪一个帮助子类是代理者这一信息局部化的时候,可以使用工厂方法模式。</li> </ul></li> <li>抽象工厂模式 <ul> <li>一个系统不应当依赖于产品类实例何如被创建,组合和表达的细节,这对于所有形态的工厂模式都是重要的。</li> <li>这个系统有多于一个的产品族,而系统只消费其 中某一产品族。同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。</li> <li>系统提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于实现。</li> </ul></li> <li>无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。 <ul> <li>究竟用哪种设计模式更适合,这要根据具体的业务需求来决定。</li> </ul></li> </ul>

页面列表

ITEM_HTML