程序有个conputer类需要组合一个输出设备两个选择
1.直接让computer组合一个printer
2.computer组合一个output接口
如果使用第一种,如果有一天有一个更好的betterPrinter,需要修改computer,如果有很多类组合了printer,需要修改很多代码
所以使用第二种
outPut接口
public interface Output {
public void out();
public void getData(String msg);
}
printer实现类
public class Printer implements Output{
@Override
public void out() {
System.out.println("printer_out");
}
@Override
public void getData(String msg) {
System.out.println("printer_getData:"+msg);
}
}
BetterPrinter实现类
public class BetterPrinter implements Output{
@Override
public void out() {
System.out.println("test betterPrinter OUT");
}
@Override
public void getData(String msg) {
System.out.println("test betterPrinterGetdata"+msg);
}
}
outPut工厂
public class OutputFactory {
public Output getOutput(){
return new Printer();
}
public static void main(String args[]){
OutputFactory of=new OutputFactory();
Computer c=new Computer(of.getOutput());
c.keyIn("javaee");
c.keyIn("java讲义");
c.print();
}
}
computer类:
public class Computer {
private Output output;
public Computer(Output out){
this.output=out;
}
public void keyIn(String msg){
output.getData(msg);
}
public void print(){
output.out();
}
}
测试类
public class MainTest {
public static void main(String args[]){
Output out=new Printer();
Computer com=new Computer(out);
com.keyIn("testPrinter");
com.print();
Output outBetter=new BetterPrinter();
Computer test=new Computer(outBetter);
test.keyIn("testBetter");
test.print();
}
}
输出结果:
printer_getData:testPrinter
printer_out
test betterPrinterGetdatatestBetter
test betterPrinter OUT