《JAVA设计模式》——简单工厂模式

Java 1111℃

假如让你设计带有打印功能的电脑,最快的办法就是在电脑类里实例化一个打印机类对象(将某品牌打印集成到电脑内部)。但是这样做有个问题,假如过一段时间打印机坏了或者要更换成更好的打印机,就需要修改电脑类里实例化打印机对象代码(拆开电脑重新集成),这是很不合理的。所以现实世界中打印机和电脑之间都是通过接口连接的,制造打印机的工厂只要按照打印机接口生产就行。如果用java程序来描述计算机类、打印机类、接口、打印机厂商之间的逻辑关系,就用到了所谓的“简单工厂”设计模式。

1.制定打印机接口标准

public interface Output 
{ 
    //打印机应该具有接收数据功能
    void getData(String msg); 
	//打印机应该具有打印输出功能
	void out();
}

2.按照接口标准研发打印机

//第一代打印机型号为M10
public class M10 implements Output {
	//模拟打印机缓存,用于存放接收到数据
	String cache;
	//重写接收数据方法
	@Override
	public void getData(String msg) {
		System.out.println("M10打印机接收数据:"+msg);
		this.cache = msg;
	}
	//重写打印方法
	@Override
	public void out() {
		System.out.println("M10打印机正在打印:"+cache);
	}
}

3.厂商打印机生产线

public class PrintFactory {
	//模拟打印机厂商根据接口标准生产M10型号打印机
	public static Output getPrinter() {
		return new M10();
	}
}

4.设计电脑类

public class Computer {
	//模拟电脑上插有一台打印机
	private Output printer;
	//电脑的构造方法
	public Computer(Output printer) {
		this.printer = printer;
	}
	//电脑执行打印命令
	public void print(String msg) {
		printer.getData(msg);
		printer.out();
	}
}

5.测试打印

public class Test {
	public static void main(String[] args) {
		//买一台的打印机
		Output printer = PrintFactory.getPrinter();
		//买一台dell电脑,并连接上打印机
		Computer dell = new Computer(printer);
		//电脑执行打印
		dell.print("hello world");
	}
}

输出:
M10打印机接收数据:hello world
M10打印机正在打印:hello world
假如现在厂商发布了新一代打印机M20,只需要买来新款插上去就可以用了,非常方便,下面用代码模拟。

6.按照接口标准研发新款打印机

//第一代打印机型号为M20
public class M20 implements Output {
	//模拟打印机缓存,用于存放接收到数据
	String cache;
	//重写接收数据方法
	@Override
	public void getData(String msg) {
		System.out.println("M20打印机接收数据:"+msg);
		this.cache = msg;
	}
	//重写打印方法
	@Override
	public void out() {
		System.out.println("M20打印机正在打印:"+cache);
	}
}

7.更新厂商打印机生产线

public class PrintFactory {
	//模拟打印机厂商根据接口标准生产M20型号打印机
	public static Output getPrinter() {
		return new M20();
	}
}

重新测试打印,输出:
M20打印机接收数据:hello world
M20打印机正在打印:hello world

8.总结

放在实际程序开发中,如果多个Computer类直接组合了M10打印机,后期需要换成M20打印机这是很大的工作量,而且模块之间耦合度较高。如果使用“工厂模式”让Computer类组合一个Output接口的对象,不论打印机换成哪个型号,代码都不用改动,只需修改工厂的一处代码即可完成。

转载请注明:零五宝典 » 《JAVA设计模式》——简单工厂模式