1. 程式人生 > >《大話設計模式》Java程式碼示例(五)之工廠方法模式

《大話設計模式》Java程式碼示例(五)之工廠方法模式

工廠方法模式(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();
    }

}