PHP设计模式——工厂方法
PHP设计模式——工厂方法
工厂方法模式核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节,如下图:
工厂方式模式主要由以下几种角色组成:
测试代码: header(Content-Type:text/html;charset=utf-8); //------------------------工厂方式测试代码------------------ require_once ./FactoryMethod/FactoryMethod.php; //-----------------餐厅厨师----------- $chickenFactory=new ChickenFactory(); $rouSongFactory=new RouSongFactory(); //-----------点餐------------ $chicken1=$chickenFactory->MakeHanbao(); $chicken2=$chickenFactory->MakeHanbao(); $rouSong1=$rouSongFactory->MakeHanbao(); $rouSong2=$rouSongFactory->MakeHanbao(); //------------------顾客吃饭--------- $chicken1->Allay(); $chicken2->Allay(); $rouSong1->Allay(); $rouSong2->Allay();
用浏览器运行测试代码我们可以发现,顾客都享用了自己的食物。
前面我们介绍了简单工厂,今天我们继续学习另外一个工厂——工厂方法。
具体案例:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我们一般采用FactoryMethod模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。工厂方法模式核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节,如下图:
工厂方式模式主要由以下几种角色组成:
抽象工厂角色(IServerFactory):是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂角色(ChickenLegBaoFactory):这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品角色(IHanbao):工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品角色(ChickenLegBao):这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
根据以上UML类图和角色编写以下PHP代码:
; } } /**鸡肉汉堡 * Class ChickenBao */ class ChickenBao implements IHanbao { function Allay() { echo I am 鸡肉汉堡,小的给主人解饿了! ; } } /**抽象工厂角色 * Interface IServerFactory */ interface IServerFactory { function MakeHanbao(); } /**具体工厂角色 肉松汉堡工厂 * Class RouSongFactory */ class RouSongFactory implements IServerFactory { function MakeHanbao() { return new RouSongBao(); } } class ChickenFactory implements IServerFactory { function MakeHanbao() { return new ChickenBao(); } }测试代码: header(Content-Type:text/html;charset=utf-8); //------------------------工厂方式测试代码------------------ require_once ./FactoryMethod/FactoryMethod.php; //-----------------餐厅厨师----------- $chickenFactory=new ChickenFactory(); $rouSongFactory=new RouSongFactory(); //-----------点餐------------ $chicken1=$chickenFactory->MakeHanbao(); $chicken2=$chickenFactory->MakeHanbao(); $rouSong1=$rouSongFactory->MakeHanbao(); $rouSong2=$rouSongFactory->MakeHanbao(); //------------------顾客吃饭--------- $chicken1->Allay(); $chicken2->Allay(); $rouSong1->Allay(); $rouSong2->Allay();
用浏览器运行测试代码我们可以发现,顾客都享用了自己的食物。
工厂方法模式优缺点:
优势:克服了简单工厂模式违背开放-封闭的原则,保持了封装对象创建过程的优点。
缺陷:当增加产品时,就得增加一个产品工厂的类,增加额外的开发量。避免不了分支判断的问题。简单工厂模式与工厂方法模式的比较:
1. 结构复杂度
简单工厂模式要占优。简单工厂模式只需一个工厂类,而工厂方法模式的工厂类随着产品类个数增加而增加,从而增加了结构的复杂程度。2.代码复杂度
代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,采集软件,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加很多方法(或代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简洁。3.管理上的难度
假如某个具体产品类需要进行一定的修改,很可能需要修改对应的工厂类。当同时需要修改多个产品类的时候,对工厂类的修改会变得相当麻烦。反而简单工厂没有这些麻烦,当多个产品类需要修改是,简单工厂模式仍然仅仅需要修改唯一的工厂类。
企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网络推广 http://www.feimao666.com
上一篇:卡汀财经—CFA (特许金融分析师)简介
下一篇:最后一页
相关阅读
热门文章
- 美国印第安纳州发现木乃伊 可能已2000岁|
- 京津冀漫游费将取消 中移动每年减少30亿|四小天鹅舞蹈
- 重庆:坚持走绿色发展之路(长江构建“绿长廊”)
- 如果挣到了100万 你会选择买房还是理财?|
- 埃航劫机者出庭一言不发 曾对乘客说别害怕
- 渝中交巡警有个微笑哥 一副娃娃脸常带着笑|皇后之夫
- 深圳城管被鄙视买不起房暴打中介 官|英甲队狂灌曼联4
- 首架arj21国产飞机抵蓉 低廉票价吸引旅客(图)|
- 法院登报道歉,还要勇于追责|新乡市纪委
- 李嘉诚事件后港资声音:收缩战线于一线城市|费雯丽的
- 广西上半年gdp增8% 主要经济指标持续回暖|生物质发电
- 山东2831个工地将停工8天 纪念抗战胜利70周年 |死神27
- 河南中牟县叫停“女老师怀孕须排号”
- 揭南海仲裁案仲裁庭真面目:欺世盗名的“怪胎”
- 印度部落版冥婚孩子去世18年后举行"玩偶婚"
- 有6种病最适合看中医 下次别再乱投医了|10gay
- 南京72岁老人独死家中 儿女双全逾半月无人|兰草的种类
- 食堂购发臭鸡骨熬汤 学校和县教育局负责人被停|迷奸水
- 县人大代表变卖查封物 终止代表资格又领刑|tvs4节目表
- 谷歌工程师因高房价住进卡车生活质量|公共基础知识视