生活随笔
收集整理的這篇文章主要介紹了
设计模式-工厂方法(Factory Method)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2018-1-20 by Atlas
核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個(gè)抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口,而不接觸哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(jié)。
Template Method Pattern是在父類建立處理邏輯的大綱骨架,而在子類補(bǔ)充具體的處理內(nèi)容。把Template Method Pattern應(yīng)用在生成對(duì)象實(shí)例方面,以Template Method Pattern架構(gòu)獲取產(chǎn)生對(duì)象實(shí)例的工廠,就是Factory Method Pattern。
- Product(產(chǎn)品)參與者
框架的部分。這個(gè)抽象類規(guī)定此Pattern所產(chǎn)生的對(duì)象實(shí)例應(yīng)有的接口,具體內(nèi)容則由子類的ConcreteProduct參與者規(guī)定。 - Creator(生產(chǎn)者)參與者
框架的部分。這是產(chǎn)生Product參與者的抽象類。具體的內(nèi)容由子類的ConcreteCreator參與者決定。
Creator參與者對(duì)于實(shí)際產(chǎn)生的ConcreteProduct參與者完全一無(wú)所知。Creator參與者唯一直到的是只要調(diào)用Product參與者和產(chǎn)生對(duì)象的方法,就能產(chǎn)生Product。 - ConcreteProduct(具體產(chǎn)品)參與者
實(shí)際處理內(nèi)容的部分。規(guī)定具體的產(chǎn)品樣式。 - ConcreteCreator(具體生產(chǎn)者)參與者
實(shí)際處理內(nèi)容的部分。規(guī)定制造實(shí)際產(chǎn)品的類。
public abstract class Product {public abstract void use();
}public abstract class Factory {public final Product create(String owner) {Product p = createProduct(owner);registerProduct(p);return p;}protected abstract Product createProduct(String owner);protected abstract void registerProduct(Product product);
}public class IDCard extends Product {private String owner;public IDCard(String owner){System.out.println("創(chuàng)建" + owner + "的卡。");this.owner = owner;}public void use() {System.out.println("使用" + owner + "的卡。");}public String getOwner() {return owner;}
}public class IDCardFactory extends Factory {private Vector<String> owners = new Vector<String>();protected Product createProduct(String owner) {return new IDCard(owner);}protected void registerProduct(Product product) {IDCard card = (IDCard) product;owners.add(card.getOwner());}public Vector<String> getOwners() {return owners;}
}
Product定義產(chǎn)品骨架。
Factory定義工廠生產(chǎn)過程骨架。
IDCard具體實(shí)現(xiàn)產(chǎn)品的內(nèi)容。
IDCardFactory具體實(shí)現(xiàn)工廠生產(chǎn)IDCard對(duì)象實(shí)例。
public class ContextLoader {protected void configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc) {// ...wac.refresh();// ...}
}public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {// ...void refresh() throws BeansException, IllegalStateException;ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;// ...
}public abstract class AbstractApplicationContext extends DefaultResourceLoaderimplements ConfigurableApplicationContext, DisposableBean {// ...public void refresh() throws BeansException, IllegalStateException {// ...ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();}protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {refreshBeanFactory();ConfigurableListableBeanFactory beanFactory = getBeanFactory();// ...return beanFactory;}public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;// ...
}public abstract class AbstractRefreshableApplicationContext extends AbstractApplicationContext {// ...protected final void refreshBeanFactory() throws BeansException {// ...DefaultListableBeanFactory beanFactory = createBeanFactory();// ...}protected DefaultListableBeanFactory createBeanFactory() {return new DefaultListableBeanFactory(getInternalParentBeanFactory());}public final ConfigurableListableBeanFactory getBeanFactory() {// ...return this.beanFactory;}// ...
}
spring框架初始化ApplicationContext創(chuàng)建BeanFactory過程刪減后的骨架。
轉(zhuǎn)載于:https://blog.51cto.com/damon188/2063297
總結(jié)
以上是生活随笔為你收集整理的设计模式-工厂方法(Factory Method)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。