日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

笔记:设计模式(3)-Abstract Factory抽象工厂模式

發布時間:2023/12/13 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 笔记:设计模式(3)-Abstract Factory抽象工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

工廠模式的起源

1.變化點在“對象的創建”,因此就封裝“對象創建”;

2.面向接口編程,依賴接口,而非依賴實現。

?

動機(Motivation)

在系統中,經常面臨著“一系列相互以來的對象”的創建工作;同時,由于需求的變化,往往存在更多系列對象的創建工作。如何應對這種變化?如何繞過常規的對象的創建方法(new),提供一種“封裝機制”來避免客戶程序和這種“多系列具體對象創建工作”的緊耦合?這就是我們要說的抽象工廠模式。

?

結構(Structure)

實現(Actionscript code)

//抽象工廠(AbstractFactory) package com.rock506.themes.abstract {import flash.errors.IllegalOperationError;public class AbstractThemeFactory{public function createSubmitButton():SubmitButton{throw new IllegalOperationError("abstract method");return null;}public function createCancelButton():CancelButton{throw new IllegalOperationError("abstract method");return null;}public function createMessageBox():MessageBox{throw new IllegalOperationError("abstract method");return null;}} } //抽象產品A(AbstractProductA) package com.rock506.themes.abstract {import flash.display.Sprite;import flash.errors.IllegalOperationError;public class Panel extends Sprite{public function Panel(){drawSkin();}protected function drawSkin():void{throw new IllegalOperationError("abstract method");}} } //抽象產品B(AbstractProductB) package com.rock506.themes.abstract {import flash.display.Sprite;import flash.errors.IllegalOperationError;public class SubmitButton extends Sprite{public function SubmitButton() {drawSkin();}protected function drawSkin():void{throw new IllegalOperationError("abstract method");}} } //具體產品A1(ConcreteProductA1) package com.rock506.themes.win7 {import com.rock506.themes.abstract.Panel;internal class Win7Panel extends Panel{public function Win7Panel(){super();}protected override function drawSkin():void{trace("draw skin: Win7Panel");}} } //具體產品B1(ConcreteProductB1) package com.rock506.themes.win7 {import com.rock506.themes.abstract.SubmitButton;internal class Win7SubmitButton extends SubmitButton{public function Win7SubmitButton(){super();}protected override function drawSkin():void{trace("draw skin: Win7SubmitButton");}} } //具體工廠(ConcreteFactory) package com.rock506.themes.win7 {import com.rock506.themes.abstract.*;public class Win7ThemeFactory extends AbstractThemeFactory{public override function createSubmitButton():SubmitButton{return new Win7SubmitButton();}public override function createCancelButton():CancelButton{return new Win7CancelButton();}public override function createMessageBox():MessageBox{return new Win7MessageBox();}} } //管理器 package com.rock506 {import com.rock506.themes.abstract.AbstractThemeFactory;import com.rock506.themes.abstract.CancelButton;import com.rock506.themes.abstract.Panel;import com.rock506.themes.abstract.SubmitButton;import flash.display.Sprite;public class ThemeManager{private var _theme:AbstractThemeFactory;public function ThemeManager(theme:AbstractThemeFactory){_theme = theme;}public function BuildMessageBox():Sprite{var sp:Sprite = new Sprite();var panel:Panel = _theme.createMessageBox();var submitButton:SubmitButton = _theme.createSubmitButton();var cancelButton:CancelButton = _theme.createCancelButton();sp.addChild(panel);sp.addChild(submitButton);sp.addChild(cancelButton);return sp;}} } //客戶端 //使用xp主題 //var theme:ThemeManager = new ThemeManager(new XpThemeFactory()); //使用win7主題 var theme:ThemeManager = new ThemeManager(new Win7ThemeFactory()); var messageBox:Sprite = theme.BuildMessageBox(); addChild(messageBox);

?

實現要點(notice)

1.如果沒有應對“多系列對象創建”的需求變化,則沒有必要使用抽象工廠模式,這時候使用簡單的靜態工廠完全可以;

2.?系列對象指的是這些對象之間有相互依賴、或作用的關系;

3.抽象工廠模式經常和工廠方法模式共同組合來應對“對象創建”的需求變化;

4.把工廠作為單件,一個應用中一般每個產品系列只需一個具體工廠的實例,因此,工廠通常最好實現為一個單件模式。

??

參考文獻(reference)

《C#面向對象設計模式縱橫談》視頻

http://terrylee.cnblogs.com

?

?

轉載于:https://www.cnblogs.com/rock506/archive/2010/09/21/1825792.html

總結

以上是生活随笔為你收集整理的笔记:设计模式(3)-Abstract Factory抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。