抽象工廠:將一些對象抽象出公共方法接口,也就是通常說的接口類和抽象類,具體對象類基礎抽象類實現具體邏輯
//定義動物接口
interface IAnimal
{
void Walk();
void Sex();
}
//動物抽象類
abstract class AbstractDog
{
public void Walk()
{
Console.WriteLine("狗走路");
}
}
//具體對象
class Maledog : AbstractDog,IAnimal
{
public void Sex()
{
Console.WriteLine("性別男");
}
}
//具體對象
class FeMaledog : AbstractDog, IAnimal
{
public void Sex()
{
Console.WriteLine("性別女");
}
}
//工廠接口類
interface IAnimalFactory
{
IAnimal CreateMaleDog();
IAnimal CreateFeMaledog();
}
//工廠抽象類
abstract class AbastractAnimalFactory
{
protected T CreateAnimal<T>() where T :IAnimal, new()
{
T animal = new T();
return animal;
}
}
//工廠實例
class MaleHumanFactory : AbastractAnimalFactory, IAnimalFactory
{
public IAnimal CreateFeMaledog()
{
return CreateAnimal<FeMaledog>();
}
public IAnimal CreateMaleDog()
{
return CreateAnimal<Maledog>();
}
}
//調用
class Program
{
static void Main(string[] args)
{
MaleHumanFactory factory = new MaleHumanFactory();
IAnimal animal = factory.CreateFeMaledog();
animal.Sex();
Console.Read();
}
}
優點:搞內聚,低耦合,結構清晰,代碼複用性強。
使用:通常用於多個不同角色,揹包道具等