接口interface的应用和工厂方法模式

本文探讨了如何在Java中使用工厂方法模式来实现打印机功能,通过接口interface实现可扩展性。当需要添加新的打印机类型时,避免在多个功能模块中重复修改代码,保证代码的维护性和灵活性。

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

 工厂方法模式

有多个功能需要使用打印机的功能,在之后的时间有可能会添加新的打印机,为了避免大量的重复代码的大量修改,将重复代码写在一个函数中,方便修改

实例如下:

1、创建一个打印的接口

interface Printer
{
	void open();
	void close();
	void print(String s);
}

2、创建佳能打印机,并且事项接口printer

class CanonPrinter implements Printer
{
	public void open()
	{
		System.out.println("CanonPrinter open");
	}
	public void print(String s)
	{
		System.out.println("CanonPrinter print ---->" + s);
	}
	private void clean()  //不允许外部类使用,所以使用private
	{
		System.out.println("CanonPrinter clean");
	}
	public void close()
	{
		this.clean();
		System.out.println("CanonPriter close");
	}

}
3、创建惠普打印机

class HPPrinter implements Printer
{
	public void open()
	{
		System.out.println("HP open");
	}
	public void close()
	{
		System.out.println("HP close");
	}
	public void print(String s)
	{
		System.out.println("HP print ---->" + s);
	}
}

需要添加一种新的打印机

class XXXPrinter implements Printer
{
	public void open()
	{
		System.out.println("XXXPrinter open");
	}
	public void print(String s)
	{
		System.out.println("XXXPrinter print ---->" + s);
	}
	public void close()
	{
		System.out.println("XXXPrinter close");
	}

}

4、修改程序,测试

class Test
{
	public static void main(String args [])
	{
		int a = 2;
		Printer printer = PrinterFactory.getPrinter(a);  //工厂模式,只需要在工厂类中添加一小段代码即可
		printer.open();
		printer.print("abc");
		printer.close();
	}
}
class PrinterFactory<span style="white-space:pre">	</span>//工厂类
{
	public static Printer getPrinter(int flag)
	{
		Printer printer = null;
		if(flag == 0)
		{
			printer = new HPPrinter();
		}
		else if(flag == 1)
		{
			printer = new CanonPrinter();
		}
		else if(flag == 2)   //新添加的打印机
		{
			printer = new XXXPrinter();
		}
		return printer;
	}
}

普通模式

普通模式下,当添加一种类型的打印机时,需要每个功能都添加一句功能,修改的重复代码多,容易漏掉

class Test
{
	public static void main(String args [])
	{
		int flog = 2;
		Printer printer = null;
<span style="white-space:pre">		</span>if(flag == 0)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>printer = new HPPrinter();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>else if(flag == 1)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>printer = new CanonPrinter();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>else if(flag == 2)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>printer = new XXXPrinter();
<span style="white-space:pre">		</span>}
		printer.open();
		printer.print("abc");
		printer.close();
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值