【正文】
Pizza pizza。 else if((“greek”) pizza = new GreekPizza()。 ()。 ()。 } 31 無法對修改關(guān)閉! Pizza orderPizza(String type){ Pizza pizza。 else if((“greek”) pizza = new GreekPizza()。 ()。 ()。 return pizza。 ()。 ()。 return pizza。 else if((“greek”) pizza = new GreekPizza()。 33 封裝創(chuàng)建匹薩的代碼 public class SimplePizzaFactory{ public Pizza createPizza(String type){ Pizza pizza = NULL。 else if((“greek”) pizza = new GreekPizza()。 return pizza。 public PizzaStroe(SimplePizzaFactory f){ =f。 pizza = (type)。 ()。 ()。 } } 35 重整匹薩店 PizzaStore 36 加盟匹薩店 ?希望在不同地方開設(shè)分店 ? 加盟店根據(jù)區(qū)域特點(diǎn),需要提供不同風(fēng)味的匹薩,但需要控制匹薩的制作過程 ? 創(chuàng)建不同區(qū)域的各自的匹薩工廠 NYPizzaFactory nyFactory=new NYPizzaFactory()。 (“Veggie”)。 pizza = createPizza(type)。 ()。 ()。 } abstract Pizza createPizza(String type)。 } else if((“clam”)){ return new NYStyleClamPizza()。 } } P i z z aS t o r e+ o r d e r P iz z a ( ty p e : S tr in g )+ c r e a te P iz z a ( )N Y P i z z aS t o r e+ c r e a te P iz z a ( )Ch i c ag o P i z z aS t o r e+ c r e a te P iz z a ( )40 類結(jié)構(gòu) 創(chuàng)建者 產(chǎn)品 41 定義工廠方法模式 ?工廠方法模式 Factory Mothed Pattern:定義一個(gè)創(chuàng)建對象的接口,但由子類決定要實(shí)例化的類(產(chǎn)品類)是那一個(gè)。 if((“NY”)){ if((“cheese”)) pizza = new NYStyleCheesePizza()。 .... } if((“Chicago”)){ .... } ()。 ... return pizza。 ?如何創(chuàng)建一個(gè)類的唯一實(shí)例 ? 只要是公開的類,就可以多次實(shí)例化它 ? 如果不是公開的類,同一個(gè)包內(nèi)的類可以實(shí)例化它多次 ?私有構(gòu)造器 public MyClass{ private MyClass() {} } ? 含有私有構(gòu)造器的類不能被實(shí)例化 47 循序漸進(jìn)推導(dǎo)單件模式 ?什么地方可以訪問私有構(gòu)造器 ? 在 MyClass內(nèi)部的代碼能調(diào)用私有構(gòu)造器代碼,但由于MyClass無法實(shí)例化,導(dǎo)致矛盾的邏輯 ?解決乊道:靜態(tài)方法 ? 靜態(tài)方法是一個(gè)類方法 public MyClass{ private MyClass(){} public static MyClass getInstance(){ return new MyClass()。 private Singleton() {} public static Singleton getInstance(){ if(uniqueInstance==null) uniqueInstance=new Singleton()。 } } 此部分代碼在多線程情況需要完善 49 單件模式的定義 ?單件模式 Singleton Pattern:確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn) ? 把某個(gè)類設(shè)計(jì)成自己管理的一個(gè)單獨(dú)實(shí)例,避免其它類再自行產(chǎn)生實(shí)例。 brewCoffeGrinds()。 addSugarAndMilk()。 steepTeaBag()。 addLemon()。 brewCoffeGrinds()。 addSugarAndMilk()。 steepTeaBag()。 addLemon()。 brew()。 addCondiments()。 brew()。 addCondiments()。 abstract void addCondiments()。模板方法模式使得子類可以在不改變算法結(jié)構(gòu)的情冴下,重新定義算法中的某些步驟 ? 通常在基類中定義算法的骨架,以及通用的處理步驟 ? 在子類中實(shí)現(xiàn)抽象的部分步驟