日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

這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. 抽象工廠模式

教研室本來是用的宏

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品九九久久 | 51ⅴ精品国产91久久久久久 | 成年人免费网站 | 国产精品视频免费在线观看 | 免费av网站在线 | 福利二区| 国产网红女主播免费视频 | 欧美精品一区在线观看 | 亚洲精品久久久久久一区二区 | 黄色不卡 | 一区在线视频 | 福利视频久久 | 国产午夜av | 日韩国产成人av | 亚洲一区二区中文字幕 | 久久亚洲欧美 | 亚洲精品自拍视频 | 国产 日韩 欧美 一区 | 亚洲日本va中文字幕久久 | 天堂成人网 | 91午夜精品 | 五月婷婷网| 精品国产乱码久久久久久丨区2区 | 国产欧美精品一区二区三区 | 免费99视频 | 亚洲一区二区三区四区在线视频 | 综合一区二区三区 | 久久久综合精品 | 亚洲二区在线视频 | 国产精品s色 | 亚洲第一视频 | 中国国产一级毛片 | 亚洲人体视频 | 99久久夜色精品国产亚洲96 | 国产精品不卡视频 | 国产又爽又黄免费视频 | 91黄色在线 | 国产精品视频大全 | 欧美亚洲天堂 | 性毛片| 精品三级在线观看 |