Java的工厂模式例子

本文通过一个简单的Java代码示例介绍了工厂模式的运用,包括简单工厂和工厂方法。通过创建Output接口,实现不同类型的打印机类(Printer和Printer2),并利用工厂类动态选择输出方式。测试表明,工厂模式使得更换打印机实现更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值