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");
}
}
所以抽象出一个接口类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");
}
}
但是这样子仍然要改动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里面的代码