1. 简单工厂:
(1). 创建输出(Output)接口
package stone;
public interface Output {
public int MAX_COUNT =10; // 最多可打印多少条记录
public void show(); // 打印
public void addData(String msg); // 把要打印的记录加入到打印排序
}
(2). 创建打印机类, 其继承输出接口
package stone;
public class Printer implements Output {
private String[] data_array= new String[MAX_COUNT]; // 保存要打印信息的数组
private int dataNum=0; // 要打印信息的个数
public void addData(String msg) {
if(dataNum>MAX_COUNT) // 要打印的信息不能大士最大值
System.out.println("Print queue is max");
else
data_array[dataNum++]=msg;
}
public void show() {
while(dataNum>0){
System.out.println("Print:"+ data_array[0]);
System.arraycopy(data_array, 1, data_array, 0, dataNum--);
}
}
}
(3). 创建输出在工厂, 此工厂定义用哪一个打印机来打印.
package stone;
public class OutputFactory {
public static Output output(){
return new Printer();
}
}
(4). 测试工厂模式的打印情况:
package stone;
public class TestSimpleFactory {
private Output output;
public TestSimpleFactory(Output output) {
this.output=output;
}
private void dataIn(String msg){
output.addData(msg);
}
private void dataOut(){
output.show();
}
public static void main(String[] args) {
TestSimpleFactory sf= new TestSimpleFactory(OutputFactory.output());
sf.dataIn("Stone Test Simple Factory 1");
sf.dataIn("Stone Test Simple Factory 2");
sf.dataOut();
}
}
输出结果如下:
Print:Stone Test Simple Factory 1
Print:Stone Test Simple Factory 2
(5) 添加另一个打印机类:
package stone;
public class Printer2 implements Output {
private String[] data_array= new String[MAX_COUNT];
private int dataNum=0;
public void addData(String msg) {
if(dataNum>MAX_COUNT)
System.out.println("Print queue is max");
else
data_array[dataNum++]=msg;
}
public void show() {
while(dataNum>0){
System.out.println("Other Print:"+ data_array[0]);
System.arraycopy(data_array, 1, data_array, 0, dataNum--);
}
}
}
(6). 当要使用另一个打印机时,仅需要改下工厂类就行了
package stone;
public class OutputFactory {
public static Output output(){
// return new Printer();
return new Printer2();
}
}
(7) 运行 TestSimpleFactory , 结果如下:
Other Print:Stone Test Simple Factory 1
Other Print:Stone Test Simple Factory 2
------------------------------------------------------------------------------------------------
2. 工厂方法
(8). 为每一个打印机添加一个在工厂:
package stone;
public class PrinterFactory {
public static Output output(){
return new Printer();
}
}
package stone;
public class Printer2Factory {
public static Output output(){
return new Printer2();
}
}
(9). 为打印机工厂 添加 工厂:
package stone;
public class OutputFactoryFactory {
public static Output outputFactory(String msg){
if(msg.equalsIgnoreCase("printer2"))
return Printer2Factory.output();
else
return PrinterFactory.output();
}
}
(10). 运行 TestFactoryMethod 来测试 工厂方法:
package stone;
public class TestFactoryMethod {
private Output output;
public TestFactoryMethod(Output output) {
this.output=output;
}
private void dataIn(String msg){
output.addData(msg);
}
private void dataOut(){
output.show();
}
public static void main(String[] args) {
TestFactoryMethod sf= new TestFactoryMethod(OutputFactoryFactory.outputFactory("printer2"));
sf.dataIn("Stone Test Simple Factory 1");
sf.dataIn("Stone Test Simple Factory 2");
sf.dataOut();
}
}
测试结果如下:
Other Print:Stone Test Simple Factory 1
Other Print:Stone Test Simple Factory 2