java工厂模式——工厂方法模式


package com.fsti.factory.factorymethod;

public interface Output {
	public final static Integer MAX_CACHE_LINE = 3;
	void getData(String str);
	void out();
}

package com.fsti.factory.factorymethod;

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.factorymethod;

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.factorymethod;
public interface OutputFactory {
	Output getOutput();
}

package com.fsti.factory.factorymethod;
public class BetterPrinterFactory implements OutputFactory {
	public Output getOutput() {
		return new BetterPrinter();
	}
}

package com.fsti.factory.factorymethod;

public class PrinterFactory implements OutputFactory {
	public Output getOutput() {
		return new Printer();
	}
}

package com.fsti.factory.factorymethod;

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) {
		// 客户端代码成功是与被调用对象的实现类分类
		// 但带来了另一种耦合:客户端代码与不同的工厂类耦合
		
		OutputFactory of = null;
		String type = "better";
		if (type.equals("better")) {
			of = new BetterPrinterFactory();
		} else {
			of = new PrinterFactory();
		}
		
		Computer c = new Computer(of.getOutput());
		c.keyIn("工厂模式之");
		c.keyIn("工厂方法模式");
		c.print();
	}
}
采用工厂方法设计的架构,客户端代码成功是与被调用对象的实现类分类,但带来了另一种耦合:客户端代码与不同的工厂类耦合。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值