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的初始化工作 ... } } }
这种方式很好的隐藏了实现细节, 用户只需要关注接口派生函数功能。但是存在一个问题,当派生类需要实现的功能较多的时候,基类需要继承多个接口;这就会导致基类过于庞大。
考虑是否通过友元的方式对类进行功能扩展;