3.抽象工厂(AbstractFactory)

抽象工厂

抽象工厂是在工厂方法的基础之上,在抽象出来一个工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。

在这里插入图片描述
在上图所示的类图中,可以看到,ChineseFactoryAmericanFactory都继承自接口IAbstractFactory,而在每个工厂方法下,又有两个方法,IPhoneColor,IPhoneSize,接下来就是具体的实现IPhoneColorIPhoneSize两个接口的代码。那么我们就可以这样使用。

    IAbstractFactory chineseFactory = new ChineseFactory();
    chineseFactory.MadePhoneSize().MadeSize();
    chineseFactory.MadePhoneColor().MadeColor();

我们只需要实例化一个具体的工厂即可。在上面的例子中,MadePhoneSize().MadeSize(),可以确定是就是造中国的手机。

好了,完整代码如下。

using System;

namespace _03_AbstractFactory
{
    class Program
    {
        /// <summary>
        /// 抽象工厂
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //制作美国手机
            IAbstractFactory americanFactory = new AmericanFactory();
            americanFactory.MadePhoneSize().MadeSize();
            americanFactory.MadePhoneColor().MadeColor();
            //制作中国手机
            IAbstractFactory chineseFactory = new ChineseFactory();
            chineseFactory.MadePhoneSize().MadeSize();
            chineseFactory.MadePhoneColor().MadeColor();
            Console.ReadKey(); 
            //如果做巴基斯坦手机呢?
        }
    }
    //工厂接口
    public interface IAbstractFactory
    {
        IPhoneSize MadePhoneSize();
        IPhoneColor MadePhoneColor();
    }
    public class AmericanFactory : IAbstractFactory
    {
        public IPhoneColor MadePhoneColor()
        {
            return new AmericanPhoneColor();
        }

        public IPhoneSize MadePhoneSize()
        {
            return new AmericanPhoneSize();
        }
    }
    public class ChineseFactory : IAbstractFactory
    {
        public IPhoneColor MadePhoneColor()
        {
            return new ChinesePhoneColor();
        }

        public IPhoneSize MadePhoneSize()
        {
            return new ChinesePhoneSize();
        }
    }
    public interface IPhoneSize
    {
        void MadeSize();
    }
    public interface IPhoneColor
    {
        void MadeColor();
    }
    public class AmericanPhoneSize : IPhoneSize
    {
        public void MadeSize()
        {
            Console.WriteLine("美国手机大小制作好了");
        }
    }
    public class ChinesePhoneSize : IPhoneSize
    {
        public void MadeSize()
        {
            Console.WriteLine("中国手机大小制作好了");
        }
    }
    public class AmericanPhoneColor : IPhoneColor
    {
        public void MadeColor()
        {
            Console.WriteLine("美国手机颜色制作好了");
        }
    }
    public class ChinesePhoneColor : IPhoneColor
    {
        public void MadeColor()
        {
            Console.WriteLine("中国手机颜色制作好了");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值