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

转载 2013年12月06日 12:00:46

文章转载:http://blog.csdn.net/lovelion/article/details/9300657


3 完整解决方案

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

图表库结构图

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

[java] view plaincopy
  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 plaincopy
  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


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

工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件...
  • LoveLion
  • LoveLion
  • 2013年07月11日 14:24
  • 22954

设计模式—工厂三兄弟

前言设计模式一共有23种,光工厂模式就有三种,刚开始学的时候还能分的清楚,到后面越来越像了,总的来说目的都是为了易维护,易拓展;手段是封装继承和多态;原则是上篇博客写到的六大原则。但是既然这是前人留下...
  • HEJI1103
  • HEJI1103
  • 2016年11月27日 15:12
  • 475

工厂三兄弟之工厂方法模式(一)

简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响...
  • LoveLion
  • LoveLion
  • 2013年07月12日 09:45
  • 17987

工厂三兄弟之工厂方法模式(三)

3 完整解决方案        Sunny公司开发人员决定使用工厂方法模式来设计日志记录器,其基本结构如图3所示:图3 日志记录器结构图       在图3中,Logger接口充当抽象产品,其子类Fi...
  • LoveLion
  • LoveLion
  • 2013年07月12日 10:35
  • 17198

工厂三兄弟之抽象工厂模式(四)

4 完整解决方案       Sunny公司开发人员使用抽象工厂模式来重构界面皮肤库的设计,其基本结构如图6所示:图6 界面皮肤库结构图       在图6中,SkinFactory接口充当抽象工厂,...
  • LoveLion
  • LoveLion
  • 2013年07月13日 16:47
  • 14045

三兄弟旗舰版TI28335DSP—核心板GPIO电灯操作—CCS6

操作GPIO点灯可以使用 1、GPIODAT  数据寄存器
  • wujunbo27
  • wujunbo27
  • 2014年08月23日 17:30
  • 2281

再次回顾设计模式——工厂三姐妹

设计模式可谓再熟悉不过了,工厂三姐妹是设计模式中最常见的,也是面试中最常问的,但是就在昨天联想面试的时候面试官问我工厂方法和抽象工厂的区别,我心里特别明白两者之间的关系,但是就是用语言组织不起来,说了...
  • u010926964
  • u010926964
  • 2015年10月27日 14:35
  • 1471

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

3 完整解决方案为了将Chart类的职责分离,同时将Chart对象的创建和使用分离,Sunny软件公司开发人员决定使用简单工厂模式对图表库进行重构,重构后的结构如图2所示: 在图2中,Chart接口...
  • will130
  • will130
  • 2016年01月02日 21:33
  • 155

工厂三兄弟之抽象工厂模式(三)

文章转载:http://blog.csdn.net/lovelion/article/details/9319423 3 抽象工厂模式概述        抽象工厂模式为创建一组...
  • wangeclipse
  • wangeclipse
  • 2013年12月05日 20:12
  • 370

工厂三兄弟之工厂方法模式(三)

文章转载:http://blog.csdn.net/lovelion/article/details/9307137 3 完整解决方案         Sunny公司开发人员决...
  • wangeclipse
  • wangeclipse
  • 2013年12月05日 20:20
  • 356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂三兄弟之简单工厂模式(三)
举报原因:
原因补充:

(最多只允许输入30个字)