设计模式之--简单工厂模式

简单工厂模式----《轻量级java EE企业应用实战(第4版)》

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 */
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) {
        // 创建OutputFactory
        OutputFactory of = new OutputFactory();

        // 将 Output对象传入,创建Computer对象
        Computer c = new Computer(of.getOutput());
        c.keyIn("轻量级Java EE企业应用实战");
        c.keyIn("疯狂Java讲义");
        c.print();
    }
}

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 */
public class OutputFactory {

    public Output getOutput() {

        // 下面两行代码用于控制系统到底使用Output的哪个实现类: BetterPrinter 或者 Printer
//        return new Printer();

        return new BetterPrinter();
    }
}

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 */
public interface Output {

    /**
     *
     * @param inputData
     */
    public void getData(String inputData);

    /**
     *
     */
    public void out();
}

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 */
// 让 Printer 类实现 Output
public class Printer implements Output {

    private String[] printData = new String[UtilConstants.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 >= UtilConstants.MAX_CACHE_LINE) {
            System.out.println("输出队列已满,添加失败");
        }
        else {
            // 把打印数据添加到队列里,已保存数据的数量加1
            printData[dataNum++] = msg;
        }
    }

}

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 * BetterPrinter 类似于 Printer类,两者都实现了 Output接口
 */
public class BetterPrinter implements Output {

    private String[] printData = new String[UtilConstants.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 >= UtilConstants.MAX_CACHE_LINE * 2) {
            System.out.println("输出队列已满,添加失败");
        }
        else {
            // 把打印数据添加到队列里,已保存数据的数量加1
            printData[dataNum++] = msg;
        }
    }
}

package pattern.simpleFactoryPattern;

/**
 * Created by Alexhu on 2017/8/15.
 */
public class UtilConstants {

    public static final int MAX_CACHE_LINE = 20;
}


你可能感兴趣的:(设计模式,java)