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的初始化工作
            ...
        }    
    }
}

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

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

转载于:https://www.cnblogs.com/hexx/p/10299994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值