java工厂模式——抽象工厂模式package com.fsti.factory.abstractfactory;public interface Output {public final static Integer MAX_CACHE_LINE = 3;void getData(String str);void out();}package com.fsti.factory.abstractfactory;public class Printer implements Output {private String[] printData = new String[MAX_CACHE_LINE];// 用以记录当前需打印的作业数private int dataNum = 0;public void getData(String str) {if (dataNum >= MAX_CACHE_LINE) {System.out.println("输出队列一满,添加失败");} else {printData[dataNum++] = str;}}public void out() {while (dataNum > 0) {System.out.println("打印机打印:" + printData[0]);// 把作业整体前移一位,并将剩下的作业数减一System.arraycopy(printData, 1, printData, 0, --dataNum);}}}package com.fsti.factory.abstractfactory;public class BetterPrinter implements Output {private String[] printData = new String[MAX_CACHE_LINE];// 用以记录当前需打印的作业数private int dataNum = 0;public void getData(String str) {if (dataNum >= MAX_CACHE_LINE) {System.out.println("输出队列一满,添加失败");} else {printData[dataNum++] = str;}}public void out() {while (dataNum > 0) {System.out.println("Better打印机打印:" + printData[0]);// 把作业整体前移一位,并将剩下的作业数减一System.arraycopy(printData, 1, printData, 0, --dataNum);}}}package com.fsti.factory.abstractfactory;public interface OutputFactory {Output getOutput();}package com.fsti.factory.abstractfactory;public class PrinterFactory implements OutputFactory {public Output getOutput() {return new Printer();}}package com.fsti.factory.abstractfactory;public class BetterPrinterFactory implements OutputFactory {public Output getOutput() {return new BetterPrinter();}}package com.fsti.factory.abstractfactory;public class OutputFactoryFactory {public static OutputFactory getOutputFactory(String type){if(type.equalsIgnoreCase("better")){return new BetterPrinterFactory();}else{return new PrinterFactory();}}}package com.fsti.factory.abstractfactory;public class Computer {private Output out;public Computer(Output out) {this.out = out;}public void keyIn(String str) {out.getData(str);}public void print() {out.out();}public static void main(String[] args) {// 使用OutputFactoryFactory来创建OutputFactory就避免了与具体工厂类的耦合。OutputFactory of = OutputFactoryFactory.getOutputFactory("better");// 将Output对象传入,创建Computer对象;Computer c = new Computer(of.getOutput());c.keyIn("工厂模式之");c.keyIn("抽象工厂模式");c.print();}}或者可以用properity文件来配置。package com.fsti.factory.abstractfactory;import java.io.*;import java.util.*;public class ComputerProperties {private Output out;public ComputerProperties(Output out) {this.out = out;}public void keyIn(String str) {out.getData(str);}public void print() {out.out();}public static void main(String[] args) {Properties p = new Properties();try {File file = new File("src/com/fsti/factory/abstractfactory/factory.properties");p.load(new FileInputStream(file));} catch (IOException e) {e.printStackTrace();}// 使用Printerfactory子类来创建OutputFactory;OutputFactory of = OutputFactoryFactory.getOutputFactory(p.getProperty("factorybean"));// 将Output对象传入,创建Computer对象;Computer c = new Computer(of.getOutput());c.keyIn("工厂模式之");c.keyIn("抽象工厂模式");c.print();}}factory.properties文件:factorybean=better