工廠模式&IoC&DIr
工廠模式&IoC&DI
-
工廠模式: 一種設計模式,讓不同的Client透過一個入口實作其所需要的工作。
-
IoC: 控制反轉,用來降低耦合,並且能夠抽換工作類別
相似:都是使用統一的入口並能夠抽換實作的物件,IoC的使用上比工廠模式進階。因為IoC可以透過依賴注入(DI)達到更靈活的使用
Example
A Dog Pet.
- Eat
- Sleep
- Walk
public class Arvin
{
public void Play()
{
CallMyDog();
}
private void CallMyDog()
{
Dog dog = new Dog();
Console.WriteLine("主人餵食了");
dog.Eat();
Console.WriteLine("主人帶去散步");
dog.Walk();
Console.WriteLine("主人說要睡覺了");
dog.Sleep();
}
}
情況:買了一隻貓
public class Arvin
{
public void Play()
{
CallMyDog();
Console.WriteLine("");
CallMyCat();
}
private void CallMyDog()
{
Dog dog = new Dog();
Console.WriteLine("主人餵食了");
dog.Eat();
Console.WriteLine("主人帶去散步");
dog.Walk();
Console.WriteLine("主人說要睡覺了");
dog.Sleep();
}
private void CallMyCat()
{
Cat cat = new Cat();
Console.WriteLine("主人餵食了");
cat.Eat();
Console.WriteLine("主人帶去散步");
cat.Walk();
Console.WriteLine("主人說要睡覺了");
cat.Sleep();
}
}
缺點:
- 增加飼養的寵物後代碼難以維護。
- 解決方式:工廠模式
- 將所有的寵物都歸納成動物(Animal)因為它們都有相同的行為模式
- 建立
IAnimal介面讓底下的寵物都實作此Interface,接著建立一個統一入口AnimalFactory類別並且包含一個CreatePet方法
IAnimal介面:擁有Eat(),Sleep(),Walk()方法- Dog,Cat繼承上面的
- AnimalFactory類:用於產生寵物的方法
CreatePet()
代碼示例
public class AnimalFactory
{
public enum AnimalType
{
Dog,
Cat
}
public static IAnimal CreatePet(AnimalType pAnimalType)
{
switch (pAnimalType)
{
case AnimalType.Dog:
return new Dog();
case AnimalType.Cat:
return new Cat();
default:
return null;
}
}
}
AnimalFactory會根據傳入的AnimalType參數決定產生哪個對應物件,而我的 Arvin Class 就可以修改成呼叫單一方法CallMyPet(AnimalFactory.AnimalType)
public void Play()
{
CallMyPet(AnimalFactory.AnimalType.Dog);
Console.WriteLine("");
CallMyPet(AnimalFactory.AnimalType.Cat);
}
private void CallMyPet(AnimalFactory.AnimalType pAnimalType)
{
var factory = AnimalFactory.CreatePet(pAnimalType);
Console.WriteLine("主人餵食了");
factory.Eat();
Console.WriteLine("主人帶去散步");
factory.Walk();
Console.WriteLine("主人說要睡覺了");
factory.Sleep();
}