zoukankan      html  css  js  c++  java
  • 简单工厂模式

    完整解决方案

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

    图2 图表库结构图

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

    [java] view plain copy
     
    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. }  

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

    [java] view plain copy
     
    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");

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

    创建饼状图!

    初始化设置饼状图!

    显示饼状图!


    【作者:刘伟 http://blog.csdn.net/lovelion

  • 相关阅读:
    win32_弹弹球游戏
    蓝桥杯评测_前n项和
    算法_fibonacci_递归求值
    PTA 分类
    _tmain() 和 main()
    VS2010 C++ 插件 VissualAssistX 安装
    vs2010 > LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    int、long、long long 的取值范围
    B树 B-树 B+树 B*树
    PTA 5-10 公路村村通 (30)
  • 原文地址:https://www.cnblogs.com/BrokenIce/p/6501947.html
Copyright © 2011-2022 走看看