設計模式之工廠方法模式(Factroy Method)


意圖:


定義一個用於創建對象的接口,讓子類決定實例化哪一個類.Factroy Method使一個類的實例化延遲到其子類中.


適用性:


1.當一個類不知道它所必須創建的對象的類的時候.


2.當一個類希望由它的子類來指定它所創建的對象的時候.


3.當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將哪一個幫助子類的代理者這一信息局部化的時候.


效果:


1.為子類提供掛鉤.


2.連接平行的類層


代碼實現:


註:創建過程直接使用瞭上次的建造者.


package com.git.books.b_design_patterns.c_factroy_method;

import com.git.books.b_design_patterns.b_build.one.Car;

/**
*
* @Description: 車類工廠方法頂級類
* @author: songqinghu
* @date: 2017年2月24日 下午2:41:37
* Version:1.0
*/
public interface CarFactroyMethod {

public abstract Car createCar();

}


package com.git.books.b_design_patterns.c_factroy_method;

import com.git.books.b_design_patterns.b_build.one.BMWCarBuilder;
import com.git.books.b_design_patterns.b_build.one.Car;
import com.git.books.b_design_patterns.b_build.one.CarDirector;
/**
*
* @Description: 寶馬車工廠類 生產寶馬車
* @author: songqinghu
* @date: 2017年2月24日 下午2:43:54
* Version:1.0
*/
public class BMWCarFactroyMethod implements CarFactroyMethod {

@Override
public Car createCar() {
return new CarDirector(new BMWCarBuilder()).build();
}

}


package com.git.books.b_design_patterns.c_factroy_method;

import com.git.books.b_design_patterns.b_build.one.AWGCarBuilder;
import com.git.books.b_design_patterns.b_build.one.Car;
import com.git.books.b_design_patterns.b_build.one.CarDirector;
/**
*
* @Description: 奔馳車工廠 生產奔馳車
* @author: songqinghu
* @date: 2017年2月24日 下午2:44:50
* Version:1.0
*/
public class AWGCarFactroyMethod implements CarFactroyMethod {

@Override
public Car createCar() {
return new CarDirector(new AWGCarBuilder()).build();
}

}


package com.git.books.b_design_patterns.c_factroy_method;

import com.git.books.b_design_patterns.b_build.one.Car;

public class FactroyMethodTest {

public static void main(String[] args) {

//生產寶馬車
CarFactroyMethod factroy = new BMWCarFactroyMethod();

Car car = factroy.createCar();

car.run();

//生產奔馳車
factroy = new AWGCarFactroyMethod();

car = factroy.createCar();

car.run();

}
}

結構圖:



重點:


註意工廠和產品類間的平行關系及該模式和抽象工廠模式及建造者模式的區別.


參考:


<<設計模式>>


<<Java與模式>>

0 個評論

要回覆文章請先登錄註冊