IPrinter myPrinter; Switch(something) { case 1: myPrinter=new HPPrinter; case 2: myPrinter=new CanonPrinter; case 3: myPrinter=new EpsonPrinter; } myPrinter.Print();
简单就是这样,复杂一点的就是配置动态构建对象。
请问,这个something是什么?
@张金棒: something就是条件,可能是数据库,可能是配置文件,可能是用户选择。
好像你提供三个打印机,用户选择了2,然后你就驱动CanonPrinter进行打印。
Print Interface(打印接口),通用方法是Print,
所有的打印类HPPrinter, CanonPrinter, EpsonPrinter都需要实现IPrinter接口方法Print。
所有下面就可以不管是啥打印机,
myPrinter.Print (myPrinter是一个实现了IPrinter接口的类)
“p的具体类型在运行时由系统确定”:p的具体类型看在代码中指向了哪个对象实例,例如:Printer p = new HP(),在运行时,运行时会在堆中给HP对象分配内存,并将分配后的实例的指针指向p。在调用p.print()的时候,运行时会根据指针去调用HP实例的print方法。
就和USB接口一样,当你连接上HP打印机时(连接的具体类型在运行时),USB接口访问到是HP;当你连接到U盘时,系统确定为U盘。