【設計模式】——工廠方法FactoryMethod

  前言:【模式總覽】——————————by xingoohtml

  模式意圖

  工廠方法在MVC中應用的很普遍。設計模式

  工廠方法意在分離產品與建立的兩個層次,使用戶在一個工廠池中能夠選擇本身想要使用的產品,而忽略其建立過程。spa

  簡單來講,就像一個大型的工廠,對於消費者來講,只須要知道都有什麼工廠的產品生產出來,而不須要關心工廠是如何生產產品的。對於工廠來講,必須知道全部的產品的製造方法。設計

  模式結構

  Creator 建立工廠的接口code

  ConcreteCreator 具體的產品建立者htm

  Product 產品的接口對象

  ConcreteProduct 具體的產品blog

  適合場景

  1 當一個類不知道它所必須建立的對象的類的時候。接口

  2 當一個類但願由他的子類來制定它所建立的對象的時候get

  3 當類建立對象的職責委託給多個幫助子類中的某一個,而且但願進行一些信息的局部初始化的時候。

  代碼結構

  工廠方法須要一個工廠接口,提供了基本的類模式,和一個產品接口,提供基本的方法。

1 interface Creator{ 2     public Product factory(); 3 } 4 interface Product{ 5     public void Say(); 6 }

  接下來就是具體的工廠方法,能夠建立不一樣的產品。

 1 class ConcreteCreator1 implements Creator{  2     public Product factory() {  3         return new ConcreteProduct1();  4  }  5 }  6 class ConcreteCreator2 implements Creator{  7     public Product factory() {  8         return new ConcreteProduct2();  9  } 10 }

  其次須要不一樣的產品。

 1 class ConcreteProduct1 implements Product{  2     public void Say() {  3         System.out.println("ConcreteProduct1");  4  }  5 }  6 class ConcreteProduct2 implements Product{  7     public void Say() {  8         System.out.println("ConcreteProduct2");  9  } 10 }

  使用方法,大體以下

 1 public class test {  2     public static Creator creator1,creator2;  3     public static Product product1,product2;  4     public static void main(String[] args){  5         creator1 = new ConcreteCreator1();  6         creator2 = new ConcreteCreator2();  7         
 8         product1 = creator1.factory();  9         product2 = creator2.factory(); 10         
11  product1.Say(); 12  product2.Say(); 13  } 14 }

  生活中的設計模式

  

  目前的生活,是一種快餐的生活。有時候不想作飯,去飯店也等不及,肯德基、麥當勞、德克士就成爲了一種很方便的方式。

  咱們去肯德基,一般會吃點漢堡,點點可樂,不須要知道這些東西是怎麼作出來的,直接點,拿到吃,簡單方便,這就是生活中的快餐工廠。

  經過一個MakeChoice方法,能夠統一的進行選擇。

interface KFC { public Client working(); } interface Client { public void eating(); } class Bread_Menu implements KFC { public Client working() { return new Client_Bread(); } } class Cola_Menu implements KFC { public Client working() { return new Client_Cola(); } } class Client_Bread implements Client { public void eating() { System.out.println("顧客 吃麪包"); } } class Client_Cola implements Client { public void eating() { System.out.println("顧客 喝可樂"); } } public class FactoryMethodTest { public static KFC waiter; public static Client client1,client2; public static KFC MakeChoice(KFC maker){ if(maker instanceof Bread_Menu){ return new Bread_Menu(); }else{ return new Cola_Menu(); } } public static void main(String[] args){ System.out.println("-------------想吃麪包-----------------"); waiter = MakeChoice(new Bread_Menu()); client1= waiter.working(); client1.eating(); System.out.println("-------------想喝可樂-----------------"); waiter = MakeChoice(new Cola_Menu()); client2 = waiter.working(); client2.eating(); } }

  執行以下

-------------想吃麪包----------------- 顧客 吃麪包 -------------想喝可樂----------------- 顧客 喝可樂
相關文章
相關標籤/搜索