2011-11-14 33 views
2

我有两个几乎完全相同的类。它们都产生可视图表,事实上也是相同的可视图表。一个产生窗口图表,一个产生网络图表。实在是在类ChartFactoryA只有一个区别使用关于实施工厂类型类的建议

using System.Windows.Forms.DataVisualization.Charting; 

虽然ChartFactoryB使用

using System.Web.UI.DataVisualization.Charting; 

基本上两个图表采取同样的数据和建设,然后返回最终图表。我想创建两个类中的一个,所以我可以将它移动到我的共享库。

这是类

public class ChartFactory 
{ 
    private const int MAX_POINTS_DISPLAYED = 5; 
    private const int MAX_POINTS_TRACKED = 6; 

    public static Chart CreateChart(UserCourse userCourse) 

    private static Chart InitilizeChart() 

    private static Chart CreateEmptyChart() 

    private static ChartArea CreateEmptyChartArea() 

    private static void SetUpAxisY(ChartArea chartArea) 

    private static void SetUpAxisX(ChartArea chartArea) 

    private static Series CreateEmptyDataSeries() 

    private static void AttachStripLineToChart(ChartArea chartArea) 

    private static void PopulateChartWithData(Chart chart, UserCourse userCourse) 

    private static ChartPoint[] InitilizeChartPoints(SessionsReadOnly sessions, int pointCount) 

    private static void PopulateChartPointsWithSessions(SessionsReadOnly sessions, int pointCount, ChartPoint[] chartPoints) 

    private static void DisplayChartPointsInReverse(Chart chart, ChartPoint[] chartPoints) 

}

回答

0

使用#define

样的公共和私有接口(从Json.Net项目复制)

using System; 
using System.Collections.Generic; 
#if !SILVERLIGHT && !PocketPC && !NET20 
using System.ComponentModel.DataAnnotations; 
using System.Configuration; 
using System.Runtime.CompilerServices; 
using System.Threading; 
using System.Web.Script.Serialization; 
#endif 
using System.Text; 
using NUnit.Framework; 
using Newtonsoft.Json; 
using System.IO; 
using System.Collections; 
using System.Xml; 
using System.Xml.Serialization; 
using System.Collections.ObjectModel; 
using Newtonsoft.Json.Linq; 
using System.Linq; 
using Newtonsoft.Json.Converters; 
#if !PocketPC && !NET20 && !WINDOWS_PHONE 
using System.Runtime.Serialization.Json; 
#endif 
using Newtonsoft.Json.Tests.TestObjects; 
using System.Runtime.Serialization; 
using System.Globalization; 
using Newtonsoft.Json.Utilities; 
using System.Reflection; 
#if !NET20 && !SILVERLIGHT 
using System.Xml.Linq; 
using System.Text.RegularExpressions; 
using System.Collections.Specialized; 
using System.Linq.Expressions; 
#endif 
#if !(NET35 || NET20 || WINDOWS_PHONE) 
using System.Dynamic; 
using System.ComponentModel; 
#endif 
+0

那么,窗体和网页的#if条件是什么? – Siegeon

+0

您必须为每个平台添加单独的设置,转至项目属性 - >生成选项卡并设置字段“条件编译符号”。在编译项目之前,您必须选择在vs工具栏上设置的适当设置。 – syb

0

看到这个链接,在C#中的例子对你的情况很有用:

http://en.wikipedia.org/wiki/Abstract_factory_pattern

+0

感谢您访问wiki的链接,但是在这种情况下,我需要更多方向。在我看过的所有工厂示例中,总有一些缺失。在这种情况下,我仍然有一个分离器来返回新的WinButton()与返回新的OSXButton的步骤。在我看来,我可以实现返回WebChart,并返回WinChart,它将调用我已经实现的两个单独的,但大部分是相同的类。对于相同的结果,似乎还有很多工作要做......我一定会错过一些东西。 – Siegeon