首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Castle IOC 實踐:TypedFactory Facility(一)使用篇

     編輯:關於.NET

動機:解決 Factory Method 模式類爆炸

傳統 Factory Method 每個具體產品需對應一個工廠類,產品增多導致工廠管理困難。TypedFactory Facility 讓我們僅定義工廠介面,容器自動實現。資訊:

屬性值
Uses ProxyYes
Requires ConfigurationYes
Uses AttributesNo
VersionBeta 2

快速入門五步驟

1. 產品介面

public interface IProduct { void Display(); }

2. 多個具體產品


public class ConcreteProductA : IProduct { public void Display() => Console.WriteLine("ConcreteProductA"); }
public class ConcreteProductB : IProduct { public void Display() => Console.WriteLine("ConcreteProductB"); }
public class ConcreteProductC : IProduct { public void Display() => Console.WriteLine("ConcreteProductC"); }

3. 工廠介面(含建立與釋放方法)


public interface IFactory
{
    IProduct Create(string id);
    void Release(IProduct handler);
}

4. 配置檔


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <facilities>
    <facility id="typedfactory">
      <factories>
        <factory id="factory" interface="TypedFactoryFacilityDemo.IFactory, TypedFactoryFacilityDemo"
          creation="Create" destruction="Release" />
      </factories>
    </facility>
  </facilities>
</configuration>

5. 使用


public class App
{
    public static void Main()
    {
        IWindsorContainer container = new WindsorContainer(new XmlInterpreter("../../MyConfig.xml"));
        container.AddFacility("typedfactory", new TypedFactoryFacility());
        container.AddComponent("proda", typeof(IProduct), typeof(ConcreteProductA));
        container.AddComponent("prodb", typeof(IProduct), typeof(ConcreteProductB));
        container.AddComponent("prodc", typeof(IProduct), typeof(ConcreteProductC));
        IFactory factory = (IFactory)container["factory"]; // Key 為 factory 元素的 id
        IProduct pa = factory.Create("proda"); pa.Display();
        IProduct pb = factory.Create("prodb"); pb.Display();
        IProduct pc = factory.Create("prodc"); pc.Display();
        Console.ReadLine();
    }
}

全程零工廠實現類,新增產品只需註冊新組件。注意:解析工廠時的 Key 是配置中 <factory id="..."> 的 id,非 Facility id。下篇將解析原理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved