1. 程式人生 > >Hibernate框架設計模式:工廠模式

Hibernate框架設計模式:工廠模式

工廠模式:是一種類建立模型,適用於在建立多個複雜物件的時候(在不同情況下建立不同物件)。

工廠模式一般分為以下兩種:

1.簡單工廠模式:在工廠類定義建立不同物件例項的方法,在需要使用物件的地方,通過建立工廠並給出需要的物件名稱來獲取物件例項。

例如:車是一個大類,具體的車物件的父類都是車類,所以設定一個車工廠類,通過不同的車物件名稱,建立並獲取對應車物件,然後就可以通過具體的車物件呼叫與之對應的方法。

Car.java:

package com.factory.cls;

public interface Car {

	void run();
}
BMW.java:
package com.factory.cls;

public class BMW implements Car{

	@Override
	public void run() {
		System.out.println("BMW車在跑");
		
	}

}
QQ.java:
package com.factory.cls;

public class QQ implements Car{

	@Override
	public void run() {
		System.out.println("QQ車在跑");
		
	}

}
FactoryCar:車工廠類
package com.factory.cls;

public class FactoryCar{
	
	public Car getCar(String carName) {
	if(carName == null){
		return null;
	}
	if("QQ".equals(carName)){
		return new QQ();
	}else if("BMW".equals(carName)){
		return new BMW();
	}
	return null;
        }
}

測試類:在測試類中建立工廠,通過工廠獲取對應名稱的車物件,並能夠呼叫車物件的方法。

package com.factory.cls;

public class Test {
	public static void main(String[] args) {
		FactoryCar factory = new FactoryCar();
		Car car = factory.getCar("BMW");
		car.run();

	}

}

2.抽象工廠模式:工廠的工廠。例如:在上面1中Car簡單工廠的基礎上還有color工廠,在這時,就需要建立一個抽象工廠,用於抽象出根據需求獲取對應車物件和獲取對應顏色物件的方法,並且還應該有一個工廠建立工具類,用於根據需求建立顏色工廠還是車工廠物件,具體如下:

AbstractFactory.java:抽象工廠

package com.factory.cls;

public abstract class AbstractFactory {
	 abstract Car getCar(String carName);
	 abstract Color getColor(String colorName);
}
FactoryCar.java:車工廠
package com.factory.cls;

public class FactoryCar extends AbstractFactory{

	@Override
	Color getColor(String colorName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	Car getCar(String carName) {
		if(carName == null){
			return null;
		}
		if("QQ".equals(carName)){
			return new QQ();
		}else if("BMW".equals(carName)){
			return new BMW();
		}
		return null;
	}
}
FactoryColor.java:顏色工廠
package com.factory.cls;

public class FactoryColor extends AbstractFactory{

	@Override
	Car getCar(String carName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	Color getColor(String colorName) {
		if(colorName == null){
			return null;
		}
		if("blue".equals(colorName)){
			return new Blue();
		}else if("red".equals(colorName)){
			return new Red();
		}
		return null;
	}

	
}
Car.java:
package com.factory.cls;

public interface Car {

	void run();
}
Color.java:
package com.factory.cls;

public interface Color {

	void createColor();
}
QQ.java:
package com.factory.cls;

public class QQ implements Car{

	@Override
	public void run() {
		System.out.println("QQ車在跑");
		
	}

}
BMW.java:
package com.factory.cls;

public class BMW implements Car{

	private int age;
	@Override
	public void run() {
		System.out.println("BMW車在跑");
		
	}

}
Red.java:
package com.factory.cls;

public class Red implements Color{

	@Override
	public void createColor() {
		// TODO Auto-generated method stub
		System.out.println("紅色");
	}

}
Blue.java:
package com.factory.cls;

public class Blue implements Color{

	@Override
	public void createColor() {
		// TODO Auto-generated method stub
		System.out.println("藍色");
	}


}
FactoryBuilder.java:工廠建立工具類,用於根據名稱建立車工廠物件還是顏色工廠物件。
package com.factory.cls;

public class FactoryBuilder {

	public static AbstractFactory getFactory(String factoryName){
		if("car".equals(factoryName)){
			return new FactoryCar();
		}else if("color".equals(factoryName)){
			return new FactoryColor();
		}
		return null;
	}
}
測試類:通過工廠建立工具類呼叫靜態方法getFactory建立對應工廠,通過工廠建立並獲取對應物件,再通過物件呼叫各自方法。
package com.factory.cls;

public class Test {
	public static void main(String[] args) {
		AbstractFactory factory = FactoryBuilder.getFactory("car");
		Car car = factory.getCar("QQ");
		factory = FactoryBuilder.getFactory("color");
		Color color = factory.getColor("blue");
		color.createColor();
		car.run();

	}

}