2019/01/21

1. 记录.net 后台一种设计模式,看起来感觉不错;

基类接口:

namespace Website
{
    public interface IBase
    {
        void init();
    }
}

派生基类接口的工厂类:

namespace Website
{
    public abstract class Base : System.Web.UI.Page, IBase
    {
    #region 对象
        protected ILogicBase bll = null;
    #endregion
    
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            
            Init();
        }

        // IBase接口实现
        public abstract void Init();
    }
}

System.Web.UI.Page类元数据:

namespace System.Web.UI
{
    public class Page : TemplateControl, IHttpHandler
    {
        public Page();
        
        ...
        
        // 
        // 摘要:
        //        引发 System.Web.UI.Control.Init 事件以对页面进行初始化。
        //
        // 参数:
        //    e:
        //        包含事件数据的 System.EventArgs。
        protected internal override void OnInit(EventArgs e);
        
    }
}

其中OnInit函数继承关系如下:

namespace System.Web.UI
{
    public abstract class TemplateControl : Control, INamingContainer, IFilterResolutionService
    {
        ...
    }
}

namespace System.Web.UI
{
    public class Control : IComponent, IDisposable, IParserAccessor, IUrlResolutionService, IDataBindingsAccessor, IControlBuilderAccessor, IControlDesignerAccessor, IExpressionAccessor 
    {
        // 摘要:
        //       引发 System.Web.UI.Control.Init 事件。
        //
        // 参数: 
        //    e:
        //        一个包含事件数据的 System.EventArgs 对象。
        protected internal virtual void OnInit(EventArgs e);
    }
}

在实现类中只需要对具体的重载函数Init()进行操作即可实现多态:

namespace Website
{
    public partial class ConcreteClass  : Base
    {
        public override void Init()
        {
            // 正对ConcreteClass的初始化工作
            ...
        }    
    }
}

这种方式很好的隐藏了实现细节, 用户只需要关注接口派生函数功能。但是存在一个问题,当派生类需要实现的功能较多的时候,基类需要继承多个接口;这就会导致基类过于庞大。

考虑是否通过友元的方式对类进行功能扩展;

posted @ 2019-01-21 17:35  wjefi  阅读(172)  评论(0)    收藏  举报