Hibernate框架設計模式:工廠模式
阿新 • • 發佈:2019-01-01
工廠模式:是一種類建立模型,適用於在建立多個複雜物件的時候(在不同情況下建立不同物件)。
工廠模式一般分為以下兩種:
1.簡單工廠模式:在工廠類定義建立不同物件例項的方法,在需要使用物件的地方,通過建立工廠並給出需要的物件名稱來獲取物件例項。
例如:車是一個大類,具體的車物件的父類都是車類,所以設定一個車工廠類,通過不同的車物件名稱,建立並獲取對應車物件,然後就可以通過具體的車物件呼叫與之對應的方法。
Car.java:
BMW.java:package com.factory.cls; public interface Car { void run(); }
QQ.java:package com.factory.cls; public class BMW implements Car{ @Override public void run() { System.out.println("BMW車在跑"); } }
FactoryCar:車工廠類package com.factory.cls; public class QQ implements Car{ @Override public void run() { System.out.println("QQ車在跑"); } }
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:抽象工廠
FactoryCar.java:車工廠package com.factory.cls; public abstract class AbstractFactory { abstract Car getCar(String carName); abstract Color getColor(String colorName); }
FactoryColor.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; } }
Car.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; } }
Color.java:package com.factory.cls; public interface Car { void run(); }
QQ.java:package com.factory.cls; public interface Color { void createColor(); }
BMW.java:package com.factory.cls; public class QQ implements Car{ @Override public void run() { System.out.println("QQ車在跑"); } }
Red.java:package com.factory.cls; public class BMW implements Car{ private int age; @Override public void run() { System.out.println("BMW車在跑"); } }
Blue.java:package com.factory.cls; public class Red implements Color{ @Override public void createColor() { // TODO Auto-generated method stub System.out.println("紅色"); } }
FactoryBuilder.java:工廠建立工具類,用於根據名稱建立車工廠物件還是顏色工廠物件。package com.factory.cls; public class Blue implements Color{ @Override public void createColor() { // TODO Auto-generated method stub System.out.println("藍色"); } }
測試類:通過工廠建立工具類呼叫靜態方法getFactory建立對應工廠,通過工廠建立並獲取對應物件,再通過物件呼叫各自方法。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; } }
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(); } }