以下内容来自marschen的java4android视频教程
本集主要内容
1.为什么要使用接口。
2.工厂方法模式。
接口其实定义了一种标准。
实现接口。
实例1 如下.
一个printer接口, 一个HPPrinter类, 一个CanonPrinter类.还有一个Test类.
//Printer 接口
interface Printer{
public void open();
public void close();
public void print(String s);
}
//HPPrinter 类
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 );
}
}
//CanonPrinter 类
class CanonPrinter implements Printer{
private void clean(){
System.out.println("Canon Priter clean");
}
public void close(){
this.clean();
System.out.println("Canon close");
}
public void open(){
System.out.println("Canon open");
}
public void print(String s ){
System.out.println("Canon Print--->"+s);
}
}
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象
//并且向上转型为Printer类型。
//Printer getPrinter(int flag);
Printer printer = null;
int flag = 1;
if(flag == 0){
printer = new HPPrinter();//向上转型
}
else if(flag ==1){
printer = new CanonPrinter();//向上转型
}
printer.open();
printer.print("test");
printer.close();
}
}
上面的程序还有很多问题,在Test 类,生成对象的代码重复出现.
下面用
简单静态工厂方法模式.
Printer
| | PrinterFactory
HPPrinter CanonPrinter
再改动一下上面的代码.
增加一个PrinterFactory类
class PrinterFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
if(flag == 0){
printer = new HPPrinter();//向上转型
}
else if(flag ==1){
printer = new CanonPrinter();//向上转型
}
else if(flag ==2){
printer = new XXXPrinter();//向上转型
}
return printer;
}
}
在Test类,这样做.
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象
//并且向上转型为Printer类型。
int flag = 2;
Printer printer = PrinterFactory.getPrinter(flag);
printer.open();
printer.print("test");
printer.close();
}
}
所以以再增加打印机.只需要增加一个打印机.如添加XXXPrinter打印机.
//XXXPrinter 类
class XXXPrinter implements Printer{
public void open(){
System.out.println("XXX open");
}
public void close(){
System.out.println("XXX close");
}
public void print(String s){
System.out.println("XXX print--->"+s );
}
在PrinterFactory里面添加.
else if(flag ==2){
printer = new XXXPrinter();//向上转型
}
无需对打印机的调用代码进行修改...