java 工厂模式小结

来源:互联网 发布:婚礼设计效果图软件 编辑:程序博客网 时间:2024/05/29 08:26

在项目开发过程中会比较经常遇到工厂模式。

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)使用工程模式的话可以实现当有多个子类且需要修改接口里面的某个方法时候,需要对多个子类进行修改,这样我们只要对工厂类的修改就可以,而不用一个个去修改子类,避免在某处子类遗漏修改。

原创粉丝点击