分享

抽象工厂模式

 印度阿三17 2020-05-06

抽象工厂模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

为了更好的理解抽象工厂模式的,先引入两个概念。

概念一,产品等级结构:这个结构就是产品的继承接口,比如电视机,里面有TCL电视机,海信等电视机。那我们就可以理解为电视机和具体品牌的电视机就会形成一个产品等级结构,电视机是抽象的,具体的产品则是子类。

概念二,产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的产品。比如我TCL的工厂里面生产电视机,手机,TCL电视机在电视机的产品等级结构中,而TCL手机位于手机的产品等级结构中。但是TCL电视机、手机则称之为一个产品族。

抽象工厂模式的结构

抽象工厂:声明一组用于创建一族产品的方法,每一个方法对应一种产品。

具体工厂:实现抽象工厂的方法,生成一组具体的产品,这些产品构成一个产品族,每一个产品都位于某个产品等级结构中。

抽象产品:给每种产品声明抽象接口,声明产品的方法。

具体产品:实现抽象产品的方法。

下面用具体的代码来实现抽象工厂模式

现在博客园要出两种皮肤,一种春天,一种夏天两种风格。每种风格的按钮、文本框、多选框都不一样,现在用抽象工厂模式实现它。

先声明抽象产品,按钮和多选框(一个产品族)

    /// <summary>
    /// 按钮
    /// </summary>
  public  interface IButton
    {
        /// <summary>
        /// 业务方法
        /// </summary>
        void  Display();
    }
    /// <summary>
    /// 多选框
    /// </summary>
    public interface ICheckBox
    {
        /// <summary>
        /// 业务方法
        /// </summary>
        void Display();
    }

具体的产品有两种风格,春天(Spring)和夏天(Summer)

    /// <summary>
    /// 春天皮肤
    /// </summary>
    public class SpringButton : IButton
    {
        public void Display()
        {
            Console.WriteLine("显示春天皮肤按钮");
        }
    }

    public class SpringCheckBox : ICheckBox
    {
        public void Display()
        {
            Console.WriteLine("显示春天皮肤多选框");
        }
    }

 

    /// <summary>
    /// 夏天皮肤
    /// </summary>
    public class SummerButton : IButton
    {
        public void Display()
        {
            Console.WriteLine("显示夏天皮肤按钮");
        }
    }

    public class SummerCheckBox : ICheckBox
    {
        public void Display()
        {
            Console.WriteLine("显示夏天皮肤多选框");
        }
    }

 

产品创建好,把抽象工厂也安排上,抽象工厂都是我们要创建产品的方法。

    /// <summary>
    /// 抽象工厂--皮肤
    /// </summary>
    public interface ISkinFactory
    {
        /// <summary>
        /// 创建按钮
        /// </summary>
        /// <returns></returns>
        IButton CreateButton();
        /// <summary>
        /// 创建多选框
        /// </summary>
        /// <returns></returns>
        ICheckBox CreateCheckBox();
    }

实现抽象工厂,创建不同的产品族

public class SpringFactory : ISkinFactory
    {
        public IButton CreateButton()
        {
            Console.WriteLine("创建春天风格按钮");
            return new SpringButton();
        }

        public ICheckBox CreateCheckBox()
        {
            Console.WriteLine("创建春天风格复选框");
            return new SpringCheckBox();
        }
    }

    public class SummerFactory : ISkinFactory
    {
        public IButton CreateButton()
        {
            Console.WriteLine("创建夏天风格按钮");
            return new SummerButton();
        }

        public ICheckBox CreateCheckBox()
        {
            Console.WriteLine("创建夏天风格复选框");
            return new SummerCheckBox();
        }
    }

 

抽象工厂模式的结构实现了,跑代码测试一下。

夏天快到了,来一个夏天风格的皮肤

                ISkinFactory factory = new SummerFactory();//实例化工厂
                IButton button = factory.CreateButton();//创建对应产品
                ICheckBox checkBox = factory.CreateCheckBox();
                button.Display();//调用方法
                checkBox.Display();

 

来源:https://www./content-4-689901.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多