設計模式(2):工廠方法模式
阿新 • • 發佈:2018-02-15
sys 實例化 不同 err reat inter 設計 end 泛型
工廠方法模式:
?
定義:
?
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。
工廠方法使用一個類的實例化延遲到子類。
?
舉個栗子:我們要生產水果罐頭,我們應該怎麽做呢?
首先,我們須要準備好原料。其次我們須要一個罐頭工廠,往工廠裏運送不同的原料,出來的就是不同的罐頭。
?
原料就是蘋果啊、橘子啊等等的這些類。
?
interface IFruits { public void taste(); } class Apple implements IFruits { public void taste() { System.out.println("I‘m apple"); } } class Orange implements IFruits { public void taste() { System.out.println("I‘m orange"); } }
?
工廠呢就是可以生產水果罐頭的工廠啊。
?
abstract class AbstractFactory { // 採用泛型對輸入參數進行限制: // 1.必須是Class類型 // 2.必須是IFruits類型的子類 public abstract <T extends IFruits> T createCan(Class<T> c); } class Factory extends AbstractFactory { @Override public <T extends IFruits> T createCan(Class<T> c) { IFruits fruits = null; try { fruits = (IFruits) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) fruits; } }
?
場景類:
?
public class Client { public static void main(String[] args) { AbstractFactory factory = new Factory(); IFruits apple = factory.createCan(Apple.class); apple.taste(); IFruits orange = factory.createCan(Orange.class); orange.taste(); } }
?
?
書中的樣例:女媧造人,產生各種膚色的人。
?
package ne; interface Human { public void say(); } class Black_human implements Human { public void say() { System.out.println("I‘m black"); } } class Yellow_human implements Human { public void say() { System.out.println("I‘m yellow"); } } abstract class AbstractFactory { public abstract <T extends Human> T createHuman(Class<T> c); } class Factory extends AbstractFactory { @Override public <T extends Human> T createHuman(Class<T> c) { Human human = null; try { human = (Human) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) human; } } public class Client { public static void main(String[] args) { AbstractFactory factory = new Factory(); Human black_human = factory.createHuman(Black_human.class); Human yellow_human = factory.createHuman(Yellow_human.class); black_human.say(); yellow_human.say(); } }
?
?
?
?
設計模式(2):工廠方法模式