抽象工厂:将一些对象抽象出公共方法接口,也就是通常说的接口类和抽象类,具体对象类基础抽象类实现具体逻辑
//定义动物接口
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();
}
}
优点:搞内聚,低耦合,结构清晰,代码复用性强。
使用:通常用于多个不同角色,背包道具等