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


    事件是这样的,我的每个页面都有一些属性,我拿其中一个属性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()+">"));
     
            }
        }
  • 相关阅读:
    servlet中doGet()和doPost()的用法
    mybatis动态SQL中的sql片段
    动态SQL语句
    Mybaits的中的对象映射(包含仅有基本数据类型的属性的和对象类型的属性的)
    <img src = "..."/>的一个图片上面怎么在放上字
    启动tomcat时出现The specified JRE installation does not exist 如何解决?
    Navicat图形更改表结构的时,设置外键时出现1452错误
    数据库主键和外键
    数据库设计的过程中的设置外键的作用
    Hibernate 事务管理
  • 原文地址:https://www.cnblogs.com/lori/p/2149752.html
Copyright © 2020-2023  润新知