接口interface的应用和工厂方法模式

来源:互联网 发布:南木梁知txt 编辑:程序博客网 时间:2024/06/06 17:12

 工厂方法模式

有多个功能需要使用打印机的功能,在之后的时间有可能会添加新的打印机,为了避免大量的重复代码的大量修改,将重复代码写在一个函数中,方便修改

实例如下:

1、创建一个打印的接口

interface Printer{void open();void close();void print(String s);}

2、创建佳能打印机,并且事项接口printer

class CanonPrinter implements Printer{public void open(){System.out.println("CanonPrinter open");}public void print(String s){System.out.println("CanonPrinter print ---->" + s);}private void clean()  //不允许外部类使用,所以使用private{System.out.println("CanonPrinter clean");}public void close(){this.clean();System.out.println("CanonPriter close");}}
3、创建惠普打印机

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 XXXPrinter implements Printer{public void open(){System.out.println("XXXPrinter open");}public void print(String s){System.out.println("XXXPrinter print ---->" + s);}public void close(){System.out.println("XXXPrinter close");}}

4、修改程序,测试

class Test{public static void main(String args []){int a = 2;Printer printer = PrinterFactory.getPrinter(a);  //工厂模式,只需要在工厂类中添加一小段代码即可printer.open();printer.print("abc");printer.close();}}
class PrinterFactory<span style="white-space:pre"></span>//工厂类{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;}}

普通模式

普通模式下,当添加一种类型的打印机时,需要每个功能都添加一句功能,修改的重复代码多,容易漏掉

class Test{public static void main(String args []){int flog = 2;Printer printer = null;<span style="white-space:pre"></span>if(flag == 0)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>printer = new HPPrinter();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if(flag == 1)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>printer = new CanonPrinter();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if(flag == 2)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>printer = new XXXPrinter();<span style="white-space:pre"></span>}printer.open();printer.print("abc");printer.close();}}





0 0
原创粉丝点击