c# 浅谈设计模式之抽象工厂

  • 上一篇博客简单说了一下——简单工厂(江南皮革厂),想了解的可以关注下我的博客,然后翻看下上一篇文章。

  • 这里还想多提一嘴,无论单列设计模式还是工厂设计模式其实都是创建型模式。什么叫创建型模式呢,简单的说就是你用了一种固定的模式去new出来了你所需要的类。

  • Ok. fine.接下来开始介绍抽象工厂。先说下抽象工厂和简单工厂的区别哈!其实呢他们的本质是一样的。都是将我们的需要的东西抽象。抽象工厂简单的说就是让我们需要的东西更加抽象,变的更加灵活。概括一下就是又包了一层。没有啥是包一层解决不了的,如果有那就再包一层。

  • 老规矩,上代码。本次我们引入 华为工厂和小米工厂举例,两个工厂都会生产对应自己品牌的手机及汽车。先给大家看看我的项目结构,让大家有个大致的概念。

  • 在这里插入图片描述

  • 对照项目结构我先简单介绍一下。首先我创建了一个抽象的工厂,将工厂抽象。然后再分别新建两个小米工厂、华为工厂实现抽象工厂。新建抽象的汽车及手机。然后再新建相对应的小米汽车、小米手机、华为汽车、华为手机。

  • 抽象工厂代码块

namespace AbstractFactory
{
    public interface IFactory
    {
        ICar car();

        IIphone iphone();

    }
}
  • 小米工厂代码块
namespace AbstractFactory
{
    public class XimiFactory : IFactory
    {
        public  ICar car()
        {
            return new XiMiCar();
        }

        public  IIphone iphone()
        {
            return new XiMiIphoen();
        }
    }
}
  • 华为工厂代码块
namespace AbstractFactory
{
   public class HWFactory:IFactory
    {
        public ICar car()
        {
            return new HWCar();
        }

        public IIphone iphone()
        {
            return new HWIphone();
        }
    }
}
  • 抽象手机
namespace AbstractFactory
{
    public interface IIphone
    {
        void CallFriends();

        void PlayGame();

        void ListenMusic();
    }
}
  • 抽象汽车
namespace AbstractFactory
{
    public interface ICar
    {
        void OpenCard();
    }
}
  • 小米手机代码块
namespace AbstractFactory
{
    public class XiMiIphoen : IIphone
    {
        public void CallFriends()
        {
            Console.WriteLine("用小米手机打给我的女朋友");
        }

        public void ListenMusic()
        {
            Console.WriteLine("用小米手机放着音乐");
        }

        public void PlayGame()
        {
            Console.WriteLine("用小米手机打游戏");
        }
    }
}

  • 华为手机代码块
namespace AbstractFactory
{
    public class HWIphone : IIphone
    {
        public void CallFriends()
        {
            Console.WriteLine("用华为手机打给我的女朋友");
        }

        public void ListenMusic()
        {
            Console.WriteLine("用华为手机放着音乐");
        }

        public void PlayGame()
        {
            Console.WriteLine("用华为手机打游戏");
        }
    }
}
  • 小米汽车代码块
namespace AbstractFactory
{
    public class XiMiCar : ICar
    {
        public void OpenCard()
        {
            Console.WriteLine("开着小米汽车");
        }
    }
}
  • 华为汽车代码块
namespace AbstractFactory
{
    public class HWCar : ICar
    {
        public void OpenCard()
        {
            Console.WriteLine("开着华为汽车");
        }
    }
}

最后我们调用实现一下

namespace AbstractFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            IFactory factory = new XimiFactory();

            factory.car().OpenCard();

            factory.iphone().ListenMusic();

            Console.ReadKey();
        }
    }
}

在这里插入图片描述

  • 好了,到这里抽象工厂的设计基本完毕。对照代码理解一下。抽象工厂确实比简单工厂在实现需要的对应东西上更加的灵活,但是随之而来的也有代码量会增加,所以有利有弊。在实际运用上更多的也是结合我们的实际需求进行合理运用。不然就会出现牛刀杀鸡的现象。但是在学习知识上我们应该庖丁解牛清晰的了解每一个知识点。为的将来更加合理的运用。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值