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