设计模式笔记0.接口和工厂

1.假如有一个Busisness类要用到一个Printer类来输出内容,可以这样写

package com.test;

public class TestInterfaceOne {
	public static void main(String args[]) {
		Business business = new Business();
		business.UsePrinterToPrint();
	}
}

class Business {
	
	public void UsePrinterToPrint() {
		PrinterA printerA = new PrinterA();
		printerA.print();
	}
}

class PrinterA {
	public void print(){
		System.out.println("this is printed by PrinterA");
	}
}


2.但是注意到Printer类现在是PrinterA,以后还可能被替换为PrinterB,PrinterC,PrinterX...,要替换的话会频繁改动Business里面的UsePrinterToPrint()里面的代码,

所以抽象出一个接口类IPrinter,像这样:

package com.test;

public class TestInterfaceTwo {
	public static void main(String args[]) {
		Business business = new Business();
		business.UsePrinterToPrint();
	}
}

class Business {
	
	public void UsePrinterToPrint() {
		IPrinter printer = new PrinterB();
		printer.print();
	}
}

interface IPrinter {
	public void print();
}

class PrinterA implements IPrinter {
	public void print(){
		System.out.println("this is printed by PrinterA");
	}
}

class PrinterB implements IPrinter {
	public void print(){
		System.out.println("this is printed by PrinterB");
	}
}


3.改成接口后,以后每次更换Printer,只需要改动UsePrinterToPrint()里面new出来的Printer就行了,

但是这样子仍然要改动Business里面的代码,如果改动一个类后需要改动另一个类的代码,那么就说这两个类之间有依赖关系,

为了不让Business与不同的Printer之间有依赖关系,使得以后可以不改动Business的代码,

我们引入了一个工厂类PrinterFactory作为他们之间的"中介",由PrinterFactory来决定要生产出哪一个Printer来给Business用,像这样:

package com.test;

public class TestInterfaceThree {
	public static void main(String args[]) {
		Business business = new Business();
		business.UsePrinterToPrint();
	}
}


class Business {
	
	public void UsePrinterToPrint() {
		
		new PrinterFactory().getPrinter().print();		
	}
}


class PrinterFactory {
	public IPrinter getPrinter() {
		return new PrinterB();
		//return new PrinterA;
	}
}

interface IPrinter {
	public void print();
}

class PrinterA implements IPrinter {
	public void print(){
		System.out.println("this is printed by PrinterA");
	}
}

class PrinterB implements IPrinter {
	public void print(){
		System.out.println("this is printed by PrinterB");
	}
}


4. 这样,以后我们要更换Printer,只需要改动工厂PrinterFactory里面的getPrinter()方法就行了,不用改动Business里面的代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值