您的位置:首页 > 编程语言 > Java开发

java 工厂模式小结

2013-11-07 09:16 337 查看
在项目开发过程中会比较经常遇到工厂模式。

1.不使用工厂模块的例子:

interface Printer{

public void open();

public void close();

public void print(String s);

}

class DEPrinter implements Printer{

public void open(){

System.out.println(" HPPrinter open");

}

public void close(){

this.clear();

System.out.println(" HPPrinter close");

}

public void clear(){

System.out.println(" HPPrinter clear");

}

public void print(String s){

System.out.println(" HPPrinter print" + s);

}

}

class HPPrinter implements Printer{

public void open(){

System.out.println(" HPPrinter open");

}

public void close(){

System.out.println(" HPPrinter close");

}

public void print(String s){

System.out.println(" HPPrinter print" + s);

}

}

class Test{

public static void main(String args[]){

//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型

int flag = 0;

Printer printer = null;

if(flag == 0){

printer = new HPPrinter();

}else if(flag == 1){

printer = new DEPrinter();

}

printer.open();

printer.print("打印");

printer.close();

}

}

2.工厂模式实现

interface Printer{

public void open();

public void close();

public void print(String s);

}

class DEPrinter implements Printer{

public void open(){

System.out.println(" HPPrinter open");

}

public void close(){

this.clear();

System.out.println(" HPPrinter close");

}

public void clear(){

System.out.println(" HPPrinter clear");

}

public void print(String s){

System.out.println(" HPPrinter print" + s);

}

}

class HPPrinter implements Printer{

public void open(){

System.out.println(" HPPrinter open");

}

public void close(){

System.out.println(" HPPrinter close");

}

public void print(String s){

System.out.println(" HPPrinter print" + s);

}

}

/**

*工厂类

*/

class PrinterFactory{

public static Printer getPrinter(int flag){

Printer printer = null;

//向上转型为Printer类型

if(flag == 0){

printer = new HPPrinter();

}else if(flag == 1){

printer = new DEPrinter();

}

return printer;

}

}

class Test{

public static void main(String args[]){

//根据用户的选择,生成相应的打印机对象,并且向上转型为Printer类型

//Printer getPrinter(int flag);

// int flag = 0;

//Printer printer = null;

//if(flag == 0){

// printer = new HPPrinter();

//}else if(flag == 1){

// printer = new DEPrinter();

//}

int flag = 0;

//利用工厂类返回一个类对象,在工厂类里面向上转型成Printer父类。

Printer printer = PrinterFactory.getPrinter(flag);

printer.open();

printer.print("打印");

printer.close();

}

}

3.总结:

1)工厂模式主要是用来返回一个对象,把new对象的方法,封装到工厂类里面。

2)在工厂类当中返回由一个具体子类对象向上转型之后的父类对象,这个父类对象就可以由调用者直接使用。

3)使用工程模式的话可以实现当有多个子类且需要修改接口里面的某个方法时候,需要对多个子类进行修改,这样我们只要对工厂类的修改就可以,而不用一个个去修改子类,避免在某处子类遗漏修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: