工厂方法
2016-03-10 23:14
225 查看
上一章节笔者介绍的简单工厂,是将Printer和BetterPrinter的类归于一个工厂来管理。那么这一章节就是将Printer由PrinterFactory来管理,BetterPrinter由BetterPrinterFactopry来管理。UML类图如下。
下面笔者将给出上面模式的代码。
1) OutoutFactory的类。
2) PrinterFactory的类。
3) Printer的类。
4) BetterPrinterFactory的类。
5) BetterPrinter的类。
6) Output的类。
7) Computer的类。
8) 执行的结果。
下面笔者将给出上面模式的代码。
1) OutoutFactory的类。
public interface OutputFactory { // 仅定义一个方法用于返回输出设备。 Output getOutput(); }
2) PrinterFactory的类。
public class PrinterFactory implements OutputFactory { public Output getOutput() { // 该工厂只负责产生Printer对象 return new Printer(); } }
3) Printer的类。
// 让Printer类实现Output public class Printer implements Output { private String[] printData = new String[MAX_CACHE_LINE]; // 用以记录当前需打印的作业数 private int dataNum = 0; public void out() { // 只要还有作业,继续打印 while(dataNum > 0) { System.out.println("打印机打印:" + printData[0]); // 把作业队列整体前移一位,并将剩下的作业数减1 System.arraycopy(printData , 1, printData, 0, --dataNum); } } public void getData(String msg) { if (dataNum >= MAX_CACHE_LINE) { System.out.println("输出队列已满,添加失败"); } else { // 把打印数据添加到队列里,已保存数据的数量加1。 printData[dataNum++] = msg; } } }
4) BetterPrinterFactory的类。
public class BetterPrinterFactory implements OutputFactory { public Output getOutput() { // 该工厂只负责产生BetterPrinter对象 return new BetterPrinter(); } }
5) BetterPrinter的类。
public class BetterPrinter implements Output { private String[] printData = new String[MAX_CACHE_LINE * 2]; // 用以记录当前需打印的作业数 private int dataNum = 0; public void out() { // 只要还有作业,继续打印 while(dataNum > 0) { System.out.println("高速打印机正在打印:" + printData[0]); // 把作业队列整体前移一位,并将剩下的作业数减1 System.arraycopy(printData , 1, printData, 0, --dataNum); } } public void getData(String msg) { if (dataNum >= MAX_CACHE_LINE * 2) { System.out.println("输出队列已满,添加失败"); } else { // 把打印数据添加到队列里,已保存数据的数量加1。 printData[dataNum++] = msg; } } }
6) Output的类。
public interface Output { // 接口里定义的属性只能是常量 int MAX_CACHE_LINE = 50; // 接口里定义的只能是public的抽象实例方法 void out(); void getData(String msg); }
7) Computer的类。
public class Computer { private Output out; public Computer(Output out) { this.out = out; } // 定义一个模拟获取字符串输入的方法 public void keyIn(String msg) { out.getData(msg); } // 定义一个模拟打印的方法 public void print() { out.out(); } public static void main(String[] args) { // 使用BetterPrinterFactory子类来创建OutputFactory OutputFactory of = new BetterPrinterFactory(); // 将Output对象传入,创建Computer对象 Computer c = new Computer(of.getOutput()); c.keyIn("Betterprinter:owen"); c.keyIn("Betterprinter:william"); c.print(); // 使用PrinterFactory子类来创建OutputFactory OutputFactory of1 = new PrinterFactory(); // 将Output对象传入,创建Computer对象 Computer c1 = new Computer(of1.getOutput()); c1.keyIn("printer:owen"); c1.keyIn("printer:william"); c1.print(); } }
8) 执行的结果。
相关文章推荐
- for 循环 以及 for 循环的嵌套
- 关于win7和ubuntu 14.04双系统启动修复的几点总结
- Spark-Graph x
- wireshark数据包分析实战 读书笔记
- centos7 搭建SVN服务器
- 《我是一只IT小小鸟》读后感
- 自定义View理解(一)
- 浅谈MVP实现Android应用层开发
- DOS
- Spring3 MVC请求参数获取的几种方法
- 【转】static_cast和reinterpret_cast
- fullpage插件
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
- Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
- 大型网站架构系列:负载均衡详解
- 第二周上机实践项目——项目4-用循环求
- 第一次课设完成后的闲谈——学生宿舍管理系统
- 【storm kafka】storm kafka集成
- 《我是一只IT小小鸟》读后感
- poj 2478 Farey Sequence