简介:
框架是一种定制的通用的应用程序开发基础软件,在其基础上可以开发完整的关且功能完善的软件。在最近几年里,已经成功实现了某些应用领域的开发框架,比如说用户介面开发及数据访问开发等。 如果能成功的开发出一个框架,这将是一个突破,因为这意味着开发将不再从头开始实现某个功能:比如一个框架如果可以成功的生成一个用户介面,哪么它也能生成做任意的用户介面。例如,假如我们使用java applets 和servlets,我们仅仅需要重写某些方法,就可以实现我们自己的代码。这其中java applets和servlets就是我们所使用的框架平台。microsoft也实现了mfc类库存,还有本文涉及的.net framework (当然还用borland的vcl)。
先决条件:
本文的读者应该有c#的使用经验,或者对java applet 和 servlet有基础的了解,以便可以理解本文所涉及的一些基本概念。
工具:
本文所写代码在windows 2000+.net framework 发行版下测试。因为本文不需要图形介面,所以我使用写字板及c#命令行编译器实现。
正文:
在下面,你将看到如何实现一个应用程序框架模型的基础构造。开发应用框架时的基本核心就是template方法,它被隐藏在应用程序里面,控制应用程序的运行。它只在基类里面实现并且不能被改变。
第一步就是构建框架的基类。在构建框架时基类是最重要的类。
它里面有可以被重写的方法,最终用户可以重写这些方法以实现他们自己的应用程序。除了这些,这里还有一个template方法用于在框架进程中控制。我们将要构建的框架包括三个需要最终用户实现的抽象方法。他们是init,run和destroy.,它们必须要顺序实现。下面就是我们实现的代码:
| // 这个类之所以被定义为抽象类,是因为用户方法还没有被实现 abstract class appframework { // 构造器调用template方法 public appframework() { templatemethod(); } // 下面的方法需要最终用户实现 public abstract void init(); public abstract void run(); public abstract void destroy(); //template方法是框架的核心 private void templatemethod() { console.writeline("initializing template engine"); // template 方法顺序调用所需要的方法 init(); run(); destroy(); console.writeline("ending template engine"); } } |
| // 从基类继承 class myclass : appframework { // 将抽象方法重写以实现定制的功能 override public void init() { console.writeline("myclass::init"); } override public void run() { console.writeline("myclass::run"); } override public void destroy() { console.writeline("myclass::destroy"); } // the main method defined public static void main(string [] arg) { myclass myclass = new myclass(); } } |
| <code> using system; abstract class appframework { public appframework() { templatemethod(); } public abstract void init(); public abstract void run(); public abstract void destroy(); private void templatemethod() { console.writeline("initializing template engine"); init(); run(); destroy(); console.writeline("ending template engine"); } } class myclass : appframework { override public void init() { console.writeline("myclass::init"); } override public void run() { console.writeline("myclass::run"); } override public void destroy() { console.writeline("myclass::destroy"); } public static void main(string [] arg) { myclass myclass = new myclass(); } } <code> |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器