工廠方法模式定義一個創建產品物件的工廠介面,將實際創建工作推遲到子類。核心工廠類不再負責具體產品創建,成為抽象工廠角色,僅負責定義具體工廠子類必須實現的介面,使系統在不修改具體工廠角色情況下引入新產品。
public abstract class PenCore {
String color;
public abstract void writeWord(String s);
}
public class RedPenCore extends PenCore {
RedPenCore(){ color="紅色"; }
public void writeWord(String s){ System.out.println("寫出"+color+"的字:"+s); }
}
public class BluePenCore extends PenCore {
BluePenCore(){ color="藍色"; }
public void writeWord(String s){ System.out.println("寫出"+color+"的字:"+s); }
}
public class BlackPenCore extends PenCore {
BlackPenCore(){ color="黑色"; }
public void writeWord(String s){ System.out.println("寫出"+color+"的字:"+s); }
}
public abstract class BallPen {
BallPen(){ System.out.println("生產了一支裝有"+getPenCore().color+"筆芯的圓珠筆"); }
public abstract PenCore getPenCore(); // 工廠方法
}
public class RedBallPen extends BallPen {
public PenCore getPenCore(){ return new RedPenCore(); }
}
public class BlueBallPen extends BallPen {
public PenCore getPenCore(){ return new BluePenCore(); }
}
public class BlackBallPen extends BallPen {
public PenCore getPenCore(){ return new BlackPenCore(); }
}
public class Application {
public static void main(String args[]){
PenCore penCore;
BallPen ballPen = new BlueBallPen();
penCore = ballPen.getPenCore();
penCore.writeWord("你好,很高興認識你");
ballPen = new RedBallPen();
penCore = ballPen.getPenCore();
penCore.writeWord("How are you");
ballPen = new BlackBallPen();
penCore = ballPen.getPenCore();
penCore.writeWord("nice to meet you");
}
}