多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 設計模式之簡單工廠/工廠方法/抽象工廠

設計模式之簡單工廠/工廠方法/抽象工廠

來源:程序員人生   發布時間:2015-03-18 09:36:02 閱讀次數:2427次

這3個設計模式都屬于創建型模式,之間具有關聯性,就放在1起講授。其實簡單工廠模式是工廠方法的1個特例,其實不是23種設計模式的1種。

使用java來寫的這幾個設計模式。java文件目錄樹以下所示:

zy@zy:~/code/designpattern/SimpleFactory/src$ tree . ├── Client.java └── zy ├── abstractfactory │   ├── AccerFactory.java │   ├── AppleFactory.java │   └── ComputerAbstractFactoy.java ├── factory │   ├── ComputerFactory.java │   ├── DesktopComputerFactory.java │   └── LaptopFactory.java ├── product │   ├── AccerDesktopComputer.java │   ├── AccerLaptop.java │   ├── AppleDesktopComputer.java │   ├── AppleLaptop.java │   ├── Computer.java │   ├── DesktopComputer.java │   └── Laptop.java └── simplefactory └── ComputerSimpleFactory.java 5 directories, 15 files

通過1個教研室購買電腦的場景來描寫動機和相應的優缺點。

1個教研室會購買1定數量的電腦來讓學生干活,比較早些的時候購買的是臺式機,

1. 下面看看普通的創建方法。

//Computer.java package zy.product; public interface Computer { void uname(); }

//Laptop.java package zy.product; public class Laptop implements Computer { public void uname() { System.out.println("我是筆記本,更加便于攜帶"); } }


//DesktopComputer.java package zy.product; public class DesktopComputer implements Computer { public void uname() { System.out.println("我是臺式機,屏幕更大"); } }

//1般調用的測試方法 public static void normalTest() { Computer labComputer1 = new Laptop(); labComputer1.uname(); Computer labComputer2 = new Laptop(); labComputer2.uname(); Computer labComputer3 = new Laptop(); labComputer3.uname(); Computer labComputer4 = new Laptop(); labComputer4.uname(); Computer labComputer5 = new Laptop(); labComputer5.uname(); }
這里,教研室需要5臺筆記本,但是如果過兩年,教研室需要5臺臺式機,那末就需要更改每個創建對象的語句。這樣的可讀性和可保護性都不好。


2. 簡單工廠模式

思路是通過1個簡單的工廠來進行電腦的創建,讓客戶端直接調用工廠來得到電腦,從而自己不用管電腦是如何生產的。 看以下代碼:

//ComputerSimpleFactory.java package zy.simplefactory; import zy.product.Computer; import zy.product.DesktopComputer; import zy.product.Laptop; public class ComputerSimpleFactory { public static Computer createComputer(String computerName) { if( "Laptop".equals(computerName)) { return new Laptop(); } else if( "DesktopComputer".equals(computerName)) { return new DesktopComputer(); } else return new Laptop(); } }

//簡單工廠的測試方法 public static void simpleFactoryTest() { //實驗室要5臺筆記本 /* Computer labComputer1 = ComputerFactory.createComputer("Labtop"); labComputer1.uname(); Computer labComputer2 = ComputerFactory.createComputer("Labtop"); labComputer2.uname(); Computer labComputer3 = ComputerFactory.createComputer("Labtop"); labComputer3.uname(); Computer labComputer4 = ComputerFactory.createComputer("Labtop"); labComputer4.uname(); Computer labComputer5 = ComputerFactory.createComputer("Labtop"); labComputer5.uname(); */ //實驗室更改需求,要5臺臺式機 Computer labComputer1 = ComputerSimpleFactory.createComputer("DesktopComputer"); labComputer1.uname(); Computer labComputer2 = ComputerSimpleFactory.createComputer("DesktopComputer"); labComputer2.uname(); Computer labComputer3 = ComputerSimpleFactory.createComputer("DesktopComputer"); labComputer3.uname(); Computer labComputer4 = ComputerSimpleFactory.createComputer("DesktopComputer"); labComputer4.uname(); Computer labComputer5 = ComputerSimpleFactory.createComputer("DesktopComputer"); labComputer5.uname(); }
可以看到,直接調用工廠類的靜態方法來生產筆記本就能夠了。統1的接口可讀性更好。并且便于保護。


3. 工廠方法模式

上面的簡單工廠模式,有個缺點就是如果增加了1種電腦的種類,比如超極本。 就需要修改工廠的靜態生產方法,背背了開放-封閉原則,對修改也進行了開放。

針對這個缺點,利用父類和子類之間虛函數的多態性,動態綁定,可以方便的創建對象。代碼以下:

//ComputerFactory.java package zy.factory; import zy.product.Computer; public interface ComputerFactory { public Computer createComputer(); }

//LaptopFactory.java package zy.factory; import zy.product.Computer; import zy.product.Laptop; public class LaptopFactory implements ComputerFactory{ public Computer createComputer() { return new Laptop(); } }

//DesktopComputerFactory.java package zy.factory; import zy.product.Computer; import zy.product.DesktopComputer; public class DesktopComputerFactory implements ComputerFactory{ public Computer createComputer() { return new DesktopComputer(); } }

//工廠方法的測試方法 public static void factoryTest() { //原來需求 ComputerFactory factory = new LaptopFactory(); //需求更改: //ComputerFactory factory = new DesktopComputerFactory(); Computer labComputer1 = factory.createComputer(); labComputer1.uname(); Computer labComputer2 = factory.createComputer(); labComputer2.uname(); Computer labComputer3 = factory.createComputer(); labComputer3.uname(); Computer labComputer4 = factory.createComputer(); labComputer4.uname(); Computer labComputer5 = factory.createComputer(); labComputer5.uname(); }

可以看到,如果增加了1個超極本的種類,不用修改現有的代碼,直接增加1個超極本的工廠便可。并且客戶真個需求代碼,也只用更換1個工廠便可。 比簡單工廠具有更好的可擴大性。 工廠方法模式,又叫做虛構造模式,就是通過這個方法來代替構造函數的作用。


4. 抽象工廠模式

教研室本來是用的宏

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 老司机免费福利视频 | 欧美大片一区二区 | 亚洲精品人成网在线播放影院 | 日韩爱爱| 精品亚洲欧美中文字幕在线看 | 久久黄色毛片 | 伊人福利 | 国产欧美一区二区久久 | 国产乱码精品一区二区三上 | 欧美精品高清在线观看 | 一级国产20岁美女毛片 | 欧日韩一区二区三区 | 色一情一区二区三区四区 | 亚洲 欧美 综合 | www爽| 亚洲日本一区二区 | 成人网免费视频 | 福利影院第一页 | 可以免费观看欧美一级毛片 | 国产无卡一级毛片aaa | 大学生一一级毛片在线播放 | 男女精品视频 | 国产精品视频流白浆免费视频 | 国产精品αv在线观看 | 中文字幕日韩专区 | 国产亚洲精品久久77777 | 国产欧美综合在线 | 久久久精品成人免费看 | 国产欧美另类 | 天堂tv亚洲tv日本tv不卡 | 欧美成国产精品 | 国产婷婷丁香久久综合 | 日本不卡免费新一二三区 | 日韩视频高清免费看 | 最近中文字幕免费国语 | 网站免费视频 | 亚洲天堂亚洲天堂 | 国产第一页在线观看 | 秋霞午夜限制土鳖免费观看 | 亚洲精品美女国产一区 | 福利网站在线 |