1.为什么要使用接口?
以前所讲的继承例子:
claqss Printer {
void open () {
System.out.println ("open");
}
void close () {
System.out.println ("close");
}
void print (String s) {
System.out.println ("print--->" + s);
}
}
//惠普打印机
class HPPrinter extends Printer {
}
//佳能打印机
claqss CanonPrinter extends Printer {
void clean() {
System.out.println ("clean");
}
void close () {
this.clean ();
super.close ();
}
}
现在改为接口:
interface Printer {
public void open () ;
public void close ();
public void print (String s);
}
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 CanonPrinter implements Printer {private void clean () {
System.out.println ("Canon clean");
}
public void open () {
System.out.println ("Canon open ");
}
public void close () {
System.out.println ("Canon close ");
}
public void print (String s) {
System.out.println ("Canon print --->" + s);
}
}
class Test {
public static void main (String args []) {
//根据用户的选择选择相应的对象,并且向上转型为Pinter类型
Printer printer = null;
int flag = 0;
if (flag = 0){
printer = new HPPrinter ();
}
else if (flag = 1){
printer = new Canonrinter ();
}
printer .open ();
printer .print ("test");
printer .close ();
}
}
如果再添加十个打印机呢,如果再写十个类就太麻烦了,那就需要用的工厂模式了
2.工厂方法模式
class PrinterFactory {
public Printer getPrinter (int flag) {
Printer printer = null;
if (flag = 0){
printer = new HPPrinter ();
}
else if (flag = 1){
printer = new Canonrinter ();
}
return printer;
}
}
其他类相同,只需改变Test 类
class Test {
public static void main (String args []) {
//根据用户的选择选择相应的对象,并且向上转型为Pinter类型
Printer printer = null;
int flag = 0;
Printer printer = PrinterFactory.getPrinter (flag);
printer .open ();
printer .print ("test");
printer .close ();
}
}
2721

被折叠的 条评论
为什么被折叠?



