• 工厂方法模式在开发中的应用


    事件是这样的,我的每个页面都有一些属性,我拿其中一个属性PageTitle为例,它是一个ArrayList

    它是页面标题导航的意思,就是说它的标题用来存储一些标题导航,比如,产品列表页,它的PageTitle可能被解释为 我的网站 > 产品 > 产品列表,而其它页面的标题导航的表现形式也大同小异。

    了解的领域模式之后,现在我们再来看程序的实现:

      #region 抽象产品 (Abstract Product)
        // "Product"
        abstract class Page
        {
            public abstract string PageTitle { get; set; }
        }
        #endregion
     
        #region 具体产品(Concrete Product)
     
        class HomePage : Page
        {
            public override string PageTitle
            {
                get
                {
                    return "主页";
                }
                set
                {
                    throw new NotImplementedException();
                }
            }
        }
     
        class ProductPage : Page
        {
            public override string PageTitle
            {
                get
                {
                    return "产品页";
                }
                set
                {
                    throw new NotImplementedException();
                }
            }
        }
     
        class UserInfoPage : Page
        {
            public override string PageTitle
            {
                get
                {
                    return "用户页";
                }
                set
                {
                    throw new NotImplementedException();
                }
            }
        }
     
        #endregion
     
        #region 抽象工厂 (Abstract Factory)
        abstract class Factory
        {
            // Fields
            protected ArrayList pages = new ArrayList();
     
            /// <summary>
            /// 对外公开一个只读属性,它的写功能由子类对pages赋值提供
            /// </summary>
            public ArrayList Pages
            {
                get { return this.pages; }
            }
     
            // Constructor
            public Factory()
            {
                this.CreatePages();
            }
     
            // Factory Method
            abstract public void CreatePages();
        }
        #endregion
     
        #region 具体工厂 (Concrete Factory)
     
        class HomeFactory : Factory
        {
            // Factory Method implementation
            override public void CreatePages()
            {
                pages.Add(new HomePage().PageTitle);
                pages.Add(new ProductPage().PageTitle);
                pages.Add(new UserInfoPage().PageTitle);
            }
        }
     
        class ProductFactory : Factory
        {
            // Factory Method implementation
            override public void CreatePages()
            {
                pages.Add(new HomePage().PageTitle);
                pages.Add(new ProductPage().PageTitle);
            }
        }
     
        #endregion

    在程序中的调用如下:

    class Program
        {
            static void Main(string[] args)
            {
     
                // Note: constructors call Factory Method
                Factory factory = new ProductFactory();
                Array.ForEach(factory.Pages.ToArray(), i => Console.Write(i.ToString()+">"));
     
            }
        }
  • 相关阅读:
    华为云确定性运维,为政务云平台稳定可靠运行保驾护航
    实践GoF的设计模式:代理模式
    KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升
    使用Mask RCNN模型实现人体关键节点标注
    Vue 中为什么要有nextTick?
    后CNN探索,如何用RNN进行图像分类
    带你认识JDK8中超nice的Native Memory Tracking
    实例分析Scheduled Thread Pool Executor与Timer的区别
    最后 3 天|报名参加 OpenYurt+EdgeX 挑战赛 ,冲击最高 5 万元奖励!
    定时任务报警通知解决方案详解
  • 原文地址:https://www.cnblogs.com/lori/p/2149752.html
Copyright © 2020-2023  润新知