2011-04-09 71 views
0

嘿夥計們,我有這個問題實現了Factory方法。 以下是調用ChartFactory的方法來獲取正確對象的主Chart類的片段。我鍵入Cast Chart對象以便能夠調用Show方法;我也擔心這一點。工廠方法在actionscript中的實現

 container = new VBox(); 
     container.percentWidth = 100; 
     container.percentHeight = 100; 
     super.media.addChild(container); 

     chartObject = new ChartBase(); 
     chartObject = ChartFactory.CreateChartObject(chartType); 
     IChart(chartObject).Show(o); 
     container.addChild(chartObject); 

     legend = new Legend(); 
     legend.dataProvider = IChart(chartObject); 
     container.addChild(legend); 

以下是ChartFactory的的方法的片段:

public static function CreateChartObject(subType:String):ChartBase 
    { 
     switch(subType) 
     { 
      case ChartFactory.AREA_CHART: 
       return new AreaCharts(); 
       break; 

      case ChartFactory.COLUMN_CHART: 
       return new ColumnCharts(); 
       break; 

      case ChartFactory.PIE_CHART: 
       return new PieCharts(); 
       break; 

      default: 
       throw new ArgumentError(subType + ": Chart type is not recognized."); 
     } 
    } 

而以下是幾個圖表類型的類之一的顯示方法:AreaCharts,等扇形圖的所有都實現IChart接口。

public function Show(o:ObjectProxy):void 
    { 
     var grids:GridLines; 
     var stroke:SolidColorStroke; 
     var horizontalAxis:CategoryAxis; 
     var verticalAxis:LinearAxis; 
     var horizontalAxisRenderer:AxisRenderer; 
     var verticalAxisRenderer:AxisRenderer; 

     grids = new GridLines(); 

     if(WidgetStylesheet.instance.LineChart_ShowGrid) 
      grids.setStyle("gridDirection", "both"); 
     else 
      grids.setStyle("gridDirection", ""); 

     stroke = new SolidColorStroke(WidgetStylesheet.instance.LineChart_GridLineColor, WidgetStylesheet.instance.LineChart_GridLineThickness); 
     grids.setStyle("horizontalStroke", stroke); 
     grids.setStyle("verticalStroke", stroke); 

     horizontalAxis = new CategoryAxis(); 
     horizontalAxis.categoryField = o.LargeUrl.Chart.xField; 
     horizontalAxis.title = o.LargeUrl.Chart.xAxisTitle.toString(); 
     verticalAxis = new LinearAxis(); 
     verticalAxis.title = o.LargeUrl.Chart.yAxisTitle.toString(); 

     horizontalAxisRenderer = new AxisRenderer(); 
     horizontalAxisRenderer.axis = horizontalAxis; 
     horizontalAxisRenderer.setStyle("tickLength", 0); 
     horizontalAxisRenderer.setStyle("showLine", false); 
     horizontalAxisRenderer.setStyle("showLabels", true); 
     horizontalAxisRenderer.setStyle("fontSize", WidgetStylesheet.instance.ComputeChartAxisFontSize(o.HeadlineFontSize)); 
     verticalAxisRenderer = new AxisRenderer(); 
     verticalAxisRenderer.axis = verticalAxis; 
     verticalAxisRenderer.setStyle("tickLength", 0); 
     verticalAxisRenderer.setStyle("showLine", false); 
     verticalAxisRenderer.setStyle("fontSize", WidgetStylesheet.instance.ComputeChartAxisFontSize(o.HeadlineFontSize)); 

     this.series = this.m_createSeries(o); 
     this.horizontalAxis = horizontalAxis; 
     this.horizontalAxisRenderers = [horizontalAxisRenderer]; 
     this.verticalAxis = verticalAxis; 
     this.verticalAxisRenderers = [verticalAxisRenderer]; 
     this.backgroundElements = [grids]; 
    } 
+0

那麼你想問什麼問題?拋棄某人去尋找問題有點太多了。 – frankhermes 2011-04-09 07:11:44

+0

圖表沒有顯示..對象正確實例化,但我擔心Show方法被調用和類型轉換。 – 2011-04-09 07:26:39

+0

這應該做什麼? chartObject = new ChartBase(); chartObject = ChartFactory.CreateChartObject(chartType); – hooleyhoop 2011-04-09 08:39:13

回答

0

嘿脂肪酶.. 我發現笏Wnt信號wrng..as olwys它WA 「我」。 我有一種習慣,將主項目隱藏起來,並將其整合。因此,在模擬中,我使用了一種xml格式,它與主項目中的格式略有不同。 如果某個值不匹配,則我有條件的chk從prog返回,n由於錯誤的xml我沒有。 所以這更多的是一個詞彙錯誤而不是邏輯錯誤。 對不起n Thanx evryone作出迴應。

1

恐怕這個代碼有多個問題。不幸的是,爲什麼你的圖表不顯示,所以你可能會應用下面的一些建議,並使用調試器來分析問題。

  1. 有創造ChartBase例如,如果你要改變下一行

    chartObject = new ChartBase(); 
    chartObject = ChartFactory.CreateChartObject(chartType); 
    
  2. 如果你的圖表的API是chartObject參考值是沒有意義的IChart你的工廠應該返回IChart而不是鑄造。

    public static function CreateChartObject(subType:String):IChart 
    
  3. 請確保您正在從工廠返回正確類的實例。即您要返回標準PieChart的子類。通常,延長課程名稱並改變包裝並不是最好的辦法。

  4. 再一次,如果您不確定程序是否進入某個函數,請使用Flash Builder調試器來檢查該問題。我無法想象沒有調試器的開發。

+0

Thanx的答案班納斯,但我試圖杜林老東西你建議..它絕對要做的工作..! – 2011-04-09 13:39:10

+0

你是什麼意思,「它不工作」?調試器在Flash Builder中正常工作。我建議你在從工廠獲得對象之前設置一個斷點,然後逐步驗證所有值是否應該是。以下是關於調試器工作原理的資源:http://help.adobe.com/en_US/flashbuilder/using/WS6f97d7caa66ef6eb1e63e3d11b6c4d0d21-7f07.html – Tjofras 2011-04-09 17:25:22

+0

Thanx for the response dude .. 「它不起作用」意味着smthng smwr是不要阻止輸出。 thanx爲鏈接..我usd d debggr沒有我gt沒有..thts笏md我打電話給hlp! – 2011-04-11 10:38:56

0

的幾點思考:

  • 調用Show方法,通過它的一些對象,但無處在的方法是任意的孩子加入到一個顯示對象。 Show應該做什麼?

  • 您的類中的很多成員變量都以UpperCase開頭。如果您的類命名相同,編譯器可以很容易地將這些類與名稱混淆。不好的做法是用大寫字母來啓動變量和函數名稱。

  • 如果將一個實例轉換爲另一個類或接口失敗,將會出現運行時錯誤。這些使用Flash Builder調試器很容易調試。

+0

frankhermesthanx迴應...程序已經正常工作。 我通過callin show method..dn繪製對象中的東西,我直接將對象(chartObject)添加到容器中。 N類型鑄造也是fyn .. – 2011-04-11 10:35:23