工厂方法模式(FactoryMethod)

创建型模式。隔离类对象的使用者和具体类型之前耦合关系。
FactoryMethod解决”单个对象”的需求变化;
AbstractFactory解决”系列对象”的需求变化;
Builder解决”对象部分”的需求变化

抽象动物

  • 动物抽象类

    1
    2
    3
    4
    5
    public abstract class Animal
    {
    public abstract void SayHi();
    public abstract void Run();
    }
  • 动物工厂抽象

    1
    2
    3
    4
    public abstract class FactoryAnimal
    {
    public abstract Animal CreateAnimal();
    }

动物狗实现类

  • 狗类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Dog:Animal
    {
    public override void SayHi()
    {
    Console.WriteLine("hi,i am dog");
    }
    public override void Run()
    {
    Console.WriteLine("dog,dog,running...");
    }
    }
  • 狗工厂类

    1
    2
    3
    4
    5
    6
    7
    public class FactoryDog:FactoryAnimal
    {
    public override Animal CreateAnimal
    {
    return new Dog();
    }
    }

动物猫实现类

  • 猫类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Cat:Animal
    {
    public override void SayHi()
    {
    Console.WriteLine("hi,i am cat");
    }
    public override void Run()
    {
    Console.WriteLine("cat,cat,running...");
    }
    }
  • 猫工厂类

    1
    2
    3
    4
    5
    6
    7
    public class FactoryCat:FactoryAnimal
    {
    public override Animal CreateAnimal
    {
    return new Cat();
    }
    }

客户端使用

1
2
3
4
5
6
7
8
9
10
11
12
void main()
{
/*频繁变化的动物对象,变化只需扩展对象并修改此处(也可以通过配置文件设置程序反射实现,无缝对接)*/
//动物狗工厂
//FactoryAnimal fac = new FactoryDog();
//动物猫工厂
FactoryAnimal f = new FactoryCat();
Animal a = f.CreateAnimal();
a.SayHi();
a.Run();
}