工厂三兄弟之简单工厂模式(三)

3 完整解决方案

       为了将Chart类的职责分离,同时将Chart对象的创建和使用分离,Sunny软件公司开发人员决定使用简单工厂模式对图表库进行重构,重构后的结构如图2所示:

工厂三兄弟之简单工厂模式(三)

2 图表库结构图

       在图2中,Chart接口充当抽象产品类,其子类HistogramChartPieChartLineChart充当具体产品类,ChartFactory充当工厂类。完整代码如下所示:

  1. //抽象图表接口:抽象产品类  
  2. interface Chart  
  3.     public void display();  
  4.  
  5.   
  6. //柱状图类:具体产品类  
  7. class HistogramChart implements Chart  
  8.     public HistogramChart()  
  9.         System.out.println("创建柱状图!");  
  10.      
  11.       
  12.     public void display()  
  13.         System.out.println("显示柱状图!");  
  14.      
  15.  
  16.   
  17. //饼状图类:具体产品类  
  18. class PieChart implements Chart  
  19.     public PieChart()  
  20.         System.out.println("创建饼状图!");  
  21.      
  22.       
  23.     public void display()  
  24.         System.out.println("显示饼状图!");  
  25.      
  26.  
  27.   
  28. //折线图类:具体产品类  
  29. class LineChart implements Chart  
  30.     public LineChart()  
  31.         System.out.println("创建折线图!");  
  32.      
  33.       
  34.     public void display()  
  35.         System.out.println("显示折线图!");  
  36.      
  37.  
  38.   
  39. //图表工厂类:工厂类  
  40. class ChartFactory  
  41.     //静态工厂方法  
  42.     public static Chart getChart(String type)  
  43.         Chart chart null 
  44.         if (type.equalsIgnoreCase("histogram"))  
  45.             chart new HistogramChart();  
  46.             System.out.println("初始化设置柱状图!");  
  47.          
  48.         else if (type.equalsIgnoreCase("pie"))  
  49.             chart new PieChart();  
  50.             System.out.println("初始化设置饼状图!");  
  51.          
  52.         else if (type.equalsIgnoreCase("line"))  
  53.             chart new LineChart();  
  54.             System.out.println("初始化设置折线图!");              
  55.          
  56.         return chart;  
  57.      
  58.  

       编写如下客户端测试代码:

  1. class Client  
  2.     public static void main(String args[])  
  3.         Chart chart;  
  4.         chart ChartFactory.getChart("histogram"); //通过静态工厂方法创建产品  
  5.         chart.display();  
  6.      
  7.  

       编译并运行程序,输出结果如下:

创建柱状图!

初始化设置柱状图!

显示柱状图!

       在客户端测试类中,我们使用工厂类的静态工厂方法创建产品对象,如果需要更换产品,只需修改静态工厂方法中的参数即可,例如将柱状图改为饼状图,只需将代码:

chart = ChartFactory.getChart("histogram");

       改为:

chart = ChartFactory.getChart("pie");

       编译并运行程序,输出结果如下:

创建饼状图!

初始化设置饼状图!

显示饼状图!