利用接口实现操作分离
来源:互联网 发布:十佳网络教育机构 编辑:程序博客网 时间:2024/05/07 23:02
本人最近遇到要在页面中显示许多格式不同的文挡的问题,因为每个文挡的格式都是不一样的,每个文挡在页面显示的界面都是不同的,但是
它们又都有一些相同之处,比如都有创建时间、保存操作等。
一时心血来潮,想把所有文挡都抽象一下,做了些尝试,水平有限,遇到不少困难,请大虾们教导和提意见。
如果要在页面中显示不同的文挡,创建时间、保存操作等是都有的,但是具体的显示文挡内容,因为受到每个页面的UI不同好象不能抽象。 using System; void Save(); }
代码如下:
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public interface IDoc
{
DateTime createTime
{
get;
set;
}
}
//具体的文挡类
public class concreteDoc1:IDoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( IDoc _IDoc )
{
//实现从接口继承的文挡
_IDoc.createTime = DateTime.Now ;
_IDoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc1 doc1 = new concreteDoc1() ;
SaveDoc( doc1 ) ; //inferface
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public interface IDoc
{
DateTime createTime
{
get;
set;
}
void Save();
}
//具体的文挡类
public class concreteDoc1:IDoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( IDoc _IDoc )
{
//实现从接口继承的文挡
_IDoc.createTime = DateTime.Now ;
_IDoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc1 doc1 = new concreteDoc1() ;
SaveDoc( doc1 ) ; //inferface
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public interface IDoc
{
DateTime createTime
{
get;
set;
}
void Save();
}
//具体的文挡类
public class concreteDoc1:IDoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( IDoc _IDoc )
{
//实现从接口继承的文挡
_IDoc.createTime = DateTime.Now ;
_IDoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc1 doc1 = new concreteDoc1() ;
SaveDoc( doc1 ) ; //inferface
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
以上代码进行了这样的处理之后,也不知道是不是真的适用,凭感觉好象是用处不大,因为没有一个具体的文挡类,就会有一个具体的显示界
面类的,可能代码结构上清晰了一点了。
感觉如果是要做一个文挡管理器的话,抽象到文挡接口可能会有用一点,因为文挡管理器只关心文挡的创建时间、修改时间、创建人、文挡类
型等。
另外上面的代码中IDoc接口有一个createTime属性,但是interface是不允许实现主体的,所以实现属性的主体都放到了继承类来实现,实际上
在这里好象是不必要的,所以又想了用abstract class 来实现。 using System; //以下两个具体的文挡类
代码如下:
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public abstract class ADoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public abstract void Save() ;
// public virtual void Save()
// {
// }
}
public class concreteDoc2:ADoc
{
public override void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( ADoc _ADoc )
{
//实现从abstract class继承的文挡
_ADoc.createTime = DateTime.Now ;
_ADoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc2 doc2 = new concreteDoc2() ;
SaveDoc( doc2 ) ; //abstract class
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
这样可以看到具体文挡类的实现不需要来控制属性的主体了。
using System;
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public abstract class ADoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public abstract void Save() ;
// public virtual void Save()
// {
// }
}
//以下两个具体的文挡类
public class concreteDoc2:ADoc
{
public override void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( ADoc _ADoc )
{
//实现从abstract class继承的文挡
_ADoc.createTime = DateTime.Now ;
_ADoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc2 doc2 = new concreteDoc2() ;
SaveDoc( doc2 ) ; //abstract class
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
这样可以看到具体文挡类的实现不需要来控制属性的主体了。
using System;
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public abstract class ADoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public abstract void Save() ;
// public virtual void Save()
// {
// }
}
//以下两个具体的文挡类
public class concreteDoc2:ADoc
{
public override void Save()
{
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( ADoc _ADoc )
{
//实现从abstract class继承的文挡
_ADoc.createTime = DateTime.Now ;
_ADoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc2 doc2 = new concreteDoc2() ;
SaveDoc( doc2 ) ; //abstract class
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
这样可以看到具体文挡类的实现不需要来控制属性的主体了。
另:
觉得在使用的时候
纯abstract类和interface差不多;
纯virtual函数和abstract函数差不多;
完整代码
*******************************************************************************
using System;
namespace ClassLibrary1
{
/// <summary>
/// BasePage 的摘要说明。
/// </summary>
public class BasePage:System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//保存文挡
public void SaveDoc( IDoc _IDoc )
{
//实现从接口继承的文挡
_IDoc.createTime = DateTime.Now ;
_IDoc.Save() ;
}
public void SaveDoc( ADoc _ADoc )
{
//实现从abstract class继承的文挡
_ADoc.createTime = DateTime.Now ;
_ADoc.Save() ;
}
//显示文挡
public virtual void ShowDoc()
{
//每个不同的文挡的显示,和具体的页面的UI元素是相关的,所以在这里不好控制
//留到子类中进行控制
}
}
//具体的页面
public class ConcretePage:BasePage
{
public void Save()
{
concreteDoc1 doc1 = new concreteDoc1() ;
concreteDoc2 doc2 = new concreteDoc2() ;
SaveDoc( doc1 ) ; //inferface
SaveDoc( doc2 ) ; //abstract class
}
public override void ShowDoc()
{
//具体实现显示文挡的代码
}
}
}
using System;
namespace ClassLibrary1
{
/// <summary>
/// doc 的摘要说明。
/// </summary>
public interface IDoc
{
DateTime createTime
{
get;
set;
}
void Save();
}
public abstract class ADoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public abstract void Save() ;
// public virtual void Save()
// {
// }
}
//以下两个具体的文挡类
public class concreteDoc1:IDoc
{
private DateTime _createTime ;
public DateTime createTime
{
get
{
return _createTime ;
}
set
{
_createTime = value ;
}
}
public void Save()
{
}
}
public class concreteDoc2:ADoc
{
public override void Save()
{
}
}
}
- 利用接口实现操作分离
- C++接口与实现分离
- C++接口与实现分离
- JDBC利用Statement接口实现增删改操作
- C++中接口与实现分离
- C++接口与实现分离(转)
- 类的接口与实现的分离
- 餐馆那些事之:接口实现分离
- c++接口与实现的分离
- 代理类:接口与实现的分离
- C++接口与实现分离(转
- C++中接口与实现分离
- 接口与实现分离技术学习总结
- C++接口与实现分离(转)
- c++导出函数接口与实现分离
- 巧用接口解耦分离实现
- C++设计:接口与实现分离
- <C++> 类的‘’实现‘’与‘’接口‘’分离
- Xdoclet学习笔记(模板)
- FreeMarker设计指南(2)
- .net 下验证控件[validation server control]的一些吐血使用经验
- 再次遭淘汰
- 决定一生的21种信念
- 利用接口实现操作分离
- FreeMarker设计指南(3)
- FreeMarker设计指南(4) (完)
- 我对CSDN blog的几点不满
- 默默无闻七年 最终成就一个优秀的IT人
- 给所有正在寻找另一半的朋友
- 永失我爱[转贴]
- Source code of CIH
- 正则表达式符号及特殊字符一览