日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式-工厂方法(Factory Method)

發(fā)布時間:2023/12/6 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-工厂方法(Factory Method) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2018-1-20 by Atlas


  • 設計思想

核心工廠類不再負責所有產品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節(jié)。

  • 應用場景

Template Method Pattern是在父類建立處理邏輯的大綱骨架,而在子類補充具體的處理內容。把Template Method Pattern應用在生成對象實例方面,以Template Method Pattern架構獲取產生對象實例的工廠,就是Factory Method Pattern。

  • UML 類圖

  • Product(產品)參與者
    框架的部分。這個抽象類規(guī)定此Pattern所產生的對象實例應有的接口,具體內容則由子類的ConcreteProduct參與者規(guī)定。
  • Creator(生產者)參與者
    框架的部分。這是產生Product參與者的抽象類。具體的內容由子類的ConcreteCreator參與者決定。
    Creator參與者對于實際產生的ConcreteProduct參與者完全一無所知。Creator參與者唯一直到的是只要調用Product參與者和產生對象的方法,就能產生Product。
  • ConcreteProduct(具體產品)參與者
    實際處理內容的部分。規(guī)定具體的產品樣式。
  • ConcreteCreator(具體生產者)參與者
    實際處理內容的部分。規(guī)定制造實際產品的類。
  • 標準示例
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定義產品骨架。
Factory定義工廠生產過程骨架。
IDCard具體實現產品的內容。
IDCardFactory具體實現工廠生產IDCard對象實例。

  • 案例鑒賞
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過程刪減后的骨架。

轉載于:https://blog.51cto.com/damon188/2063297

總結

以上是生活随笔為你收集整理的设计模式-工厂方法(Factory Method)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。