天天看点

工厂模式-三种类型

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