1. 程式人生 > >工廠模式-三種類型

工廠模式-三種類型

1.普通工廠模式

可以封裝不同的實現,統一為一個方法,但是需要傳不同的引數。使得程式容易維護和擴充套件。

Test.java

package cn.test.factorymethod;

public class Test {

	public static void main(String[] args) {
		
		//例項化工廠
		Factory factory = new Factory();
		Print print = factory.createWindow("HP");
		print.print();
		
		Print print2 = factory.createWindow("EPSON");
		print2.print();
		
	}
	
}

Factory.java

package cn.test.factorymethod;

public class Factory {
  
    public Print createWindow (String type) {
        if(type.equals("HP")) {
            return new PrintHP();
        } else if(type.equals("EPSON")) {
            return new PrintEPSON();
        } else{
        	return new PrintHP();
        }
    }
    
}
Print.java
package cn.test.factorymethod;

public abstract class Print {
	
    public abstract void print();
    
}
PrintEPSON.java
package cn.test.factorymethod;

public class PrintEPSON extends Print {
    
    @Override
    public void print() {
        System.out.println("I'm EPSON");
    }
}
PrintHP.java
package cn.test.factorymethod;

public class PrintHP extends Print {
    
	@Override
	public void print() {
		
		 System.out.println("I'm HP");
	}
}

返回結果:

I'm EPSON
I'm HP

2.多個工廠模式

在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件

修改Factory.java類如下:

package cn.test.factorymethod;

public class Factory {
  
  public Print epson(){
	  return new PrintEPSON();
  }
 
  public Print hp(){
	  return new PrintHP();
  }
    
}
修改Test.java類如下:
package cn.test.factorymethod;

public class Test {

	public static void main(String[] args) {

		// 例項化工廠
		Factory factory = new Factory();
		Print print = factory.epson();
		print.print();

		Print print2 = factory.hp();
		print2.print();

	}

}

返回結果:

I'm EPSON
I'm HP

3.靜態工廠模式

將上面的多個工廠方法模式裡的方法置為靜態的,不需要建立例項,直接呼叫即可。

修改Factory.java類如下:

package cn.test.factorymethod;

public class Factory {
  
  public static Print epson(){
	  return new PrintEPSON();
  }
 
  public static Print hp(){
	  return new PrintHP();
  }
    
}


修改Test.java類如下:

package cn.test.factorymethod;

public class Test {

	public static void main(String[] args) {

		Print print = Factory.epson();
		print.print();

		Print print2 = Factory.hp();
		print2.print();

	}

}

返回結果:

I'm EPSON
I'm HP