<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="详解PHP如何实现设计模式中的抽象工厂模式" id="card1">
<p> 游客</p><p>
标题:详解PHP如何实现设计模式中的抽象工厂模式<br/>
正文:<br/>
抽象工厂模式（Abstact Factory）是一种常见的软件设计模式。该模式为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候，可以为此系列的产品族创建一个 具体的工厂类。【意图】抽象工厂模式提供一个创建一系统相关或相互依赖对象的接口，而无需指定它们具体的类【GOF95】【抽象工厂模式结构图】【抽象工厂模式中主要角色】抽象工厂(Abstract Factory)角色：它声明一个创建抽象产品对象的接口。通常以接口或抽象类实现，所有的具体工厂类必须实现这个接口或继承这个类。具体工厂(Concrete Factory)角色：实现创建产品对象的操作。客户端直接调用这个角色创建产品的实例。这个角色包含有选择合适的产品对象的逻辑。通常使用具体类实现。抽象产品(Abstract Product)角色：声明一类产品的接口。它是工厂方法模式所创建的对象的父类，或它们共同拥有的接口。具体产品(Concrete Product)角色：实现抽象产品角色所定义的接口，定义一个将被相应的具体工厂创建的产品对象。其内部包含了应用程序的业务逻辑。【抽象工厂模式的优缺点】抽象工厂模式的优点:<br/> 1、分离了具体的类<br/> 2、使增加或替换产品族变得容易<br/> 3、有利于产品的一致性抽象工厂模式的缺点: 难以支持新种类的产品。这是因为AbstractFactory接口确定了可以被创建的产品集合。支持新各类的产品就需要扩展访工厂接口，从而导致 AbstractFactory类及其所有子类的改变。<br/> 抽象工厂就是以一种倾斜的方式支持增加新的产品中，它为新产品族的增加提供了方便，而不能为新的产品等级结构的增加提供这样的方便。【抽象工厂模式适用场景】以下情况应当使用抽象工厂模式：<br/> 1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节，这对于所有形态的工厂模式都是重要的。<br/> 2、这个系统的产品有多于一个的产品族，而系统只消费其中某一族的产品。<br/> 3、 同属于同一个产品族的产品是在一起使用的，这一约束必须在系统的设计中体现出来。<br/> 4、系统提供一个产品类的库，所有的产品以同样的接口出现，从而使用客户端不依赖于实现<br/> 【Java与模式189页】Abstract Factory模式的几个要点：1、如果没有应对“多系列对象构建”<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1813&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1813&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1813&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1813&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1813&amp;Page=8">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1813">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1813">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>