设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(3)

   前面写了简单工厂模式跟工厂方法模式,照着以前的思路再来看抽象工厂模式觉得就没啥新意了。从工厂方法模式的角度去分析,整体可分为实体类跟工厂类两大分支。其中实体部分由一个抽象类作为基类,再加若干个子类;工厂类有一个借口加若干个工厂子类组成。现在抽象方法就是在实体类这一分支上再加上一个并列的抽象类,以及相同结构的实现该抽象类的子类。

   下面以实际代码展开说明:

  abstract class MountainAnimal
    {
        public abstract void Run();
        public abstract void Jump();
    }
    class MountainCat : MountainAnimal
    {
        public override void Run()
        {
            Console.WriteLine("i am mountain cat i can run");
        }

        public override void Jump()
        {
            Console.WriteLine("i am mountain cat i can jump");
        }
    }
    class MountainDog : MountainAnimal
    {
        public override void Run()
        {
            Console.WriteLine("i am mountain dog i can run");
        }

        public override void Jump()
        {
            Console.WriteLine("i am mountain dog i can jump");
        }
    }
    abstract class GrassAnimal
    {
        public abstract void Run();
        public abstract void Jump();
    }
    class GrassCat : GrassAnimal
    {
        public override void Run()
        {
            Console.WriteLine("i am grass cat i can run");
        }

        public override void Jump()
        {
            Console.WriteLine("i am grass cat i can jump");
        }
    }
    class GrassDog : GrassAnimal
    {
        public override void Run()
        {
            Console.WriteLine("i am grass dog i can run");
        }
        public override void Jump()
        {
            Console.WriteLine("i am grass dog i can jump");
        }
    }
    interface Factory
    {
        MountainAnimal CreateMountainAnimal();
        GrassAnimal CreateGrassAnimal();
    }
    class CatFactory : Factory
    {
        public MountainAnimal CreateMountainAnimal()
        {
            return new MountainCat();
        }
        public GrassAnimal CreateGrassAnimal()
        {
            return new GrassCat();

        }
    }
    class DogFactory : Factory
    {
        public MountainAnimal CreateMountainAnimal()
        {
            return new MountainDog();
        }
        public GrassAnimal CreateGrassAnimal()
        {
            return new GrassDog();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Factory factory = new DogFactory();
            MountainAnimal animal = factory.CreateMountainAnimal();
            animal.Jump();
            Console.ReadKey();
        }
    }


按照以前的思路是有一个动物类,其中有跑跟跳的方法,然后两个子类猫跟狗,去具体的实现这两个方法。现在是在原来的基础上把动物这个抽象类改成山地动物跟草原动物这两个并列的抽象类,其中的他们有共同的抽象方法。

这种方式跟工厂方法模式几乎没有区别,完全就是在一个思路上做的扩展。但是有一点就是你想再加上一个类别,比如湿地动物类,你又要再次在工厂类中修改代码,这样貌似形成一种恶性的循环,现在我还不明白怎么解决这类问题。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值