《大話設計模式》Java程式碼示例(五)之工廠方法模式
阿新 • • 發佈:2018-12-18
工廠方法模式(Factory Method):定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。
package factorymethod; /** * 工廠方法模式(Factory Method) * 雷鋒類 */ public class LeiFeng { public void sweep() { System.out.println("掃地"); } public void wash() { System.out.println("洗衣"); } public void buyRice() { System.out.println("買米"); } }
package factorymethod; /** * 工廠方法模式(Factory Method) * 大學生類 */ public class Undergraduate extends LeiFeng { @Override public void sweep() { System.out.println("學雷鋒的大學生幫忙掃地"); } @Override public void wash() { System.out.println("學雷鋒的大學生幫忙洗衣"); } @Override public void buyRice() { System.out.println("學雷鋒的大學生幫忙買米"); } }
package factorymethod; /** * 工廠方法模式(Factory Method) * 社群志願者類 */ public class Volunteer extends LeiFeng { @Override public void sweep() { System.out.println("社群志願者幫忙掃地"); } @Override public void wash() { System.out.println("社群志願者幫忙洗衣"); } @Override public void buyRice() { System.out.println("社群志願者幫忙買米"); } }
package factorymethod;
/**
* 工廠方法模式(Factory Method)
* 雷鋒工廠
*/
public interface IFactory {
LeiFeng createLeiFeng();
}
/**
* 學雷鋒的大學生工廠
*/
class UndergraduateFactory implements IFactory {
@Override
public LeiFeng createLeiFeng() {
return new Undergraduate();
}
}
/**
* 社群志願者工廠
*/
class VolunteerFactory implements IFactory {
@Override
public LeiFeng createLeiFeng() {
return new Volunteer();
}
}
package factorymethod;
/**
* 工廠方法模式(Factory Method)
* 客戶端main方法
*/
public class Client {
public static void main(String[] args) {
// 大學生
IFactory undergraduateFactory = new UndergraduateFactory();
LeiFeng student = undergraduateFactory.createLeiFeng();
student.sweep();
student.wash();
student.buyRice();
// 志願者
IFactory volunteerFactory = new VolunteerFactory();
LeiFeng volunteer = volunteerFactory.createLeiFeng();
volunteer.sweep();
volunteer.wash();
volunteer.buyRice();
}
}