摘要:由于看的人多,参与讨论的人少,我想可能是我写的过于简略了,所以今天重新编辑了一下。 模版方法的关键是在父类中的非抽象方法中调用抽象方法,子类各自实现自己父类的抽象方法。子类的区别仅仅是实现方法的不同,其自身原来的优势就是可以在有新的具体类的增加时不用修改抽象类,而客户端的调用则只是通过多态来执行抽象类的方法。在.NET中,我们可以采用委托方法实现相同的目的。 我...
阅读全文
摘要:面试的时候遇到有这么一题:您在什么情况下会用到虚方法(虚函数)?它与接口有什么不同? 当不同的人面对这个问题的时候应该是有不同的反应,因为每个人对以上提到的知识点的理解程度不同。绝对有人迷惑,也有人似乎明白,有人不屑的撇撇嘴。迷惑的人因为不知道面试官想问什么,虚方法和接口在不同的讨论范围真是有点风马牛不相及;明白的人似乎知道有这么几个东西,并侃侃而谈:“由于Java不支持多继承,而有可能某个类或...
阅读全文
摘要:虛函數:由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual public class myclass { public virtual int myint() { 函數体; } } class myclass1:myclass { public override int myint() { 函數体1; } } 抽象類、抽象函數:由...
阅读全文
摘要:1、开闭原则 :一个模块对扩展是开放的,对修改是关闭的。 2、完全替换原则 :派生类应该能完全替换掉基类。在需要一个基类指针或引用的地方,传一个派生类的指针或引用,代码也能正常工作。 3、依赖倒置原则 :依赖于抽象,而不要依赖于具体。在一般的设计中,基类的任务是为派生类提供服务,派生类通过调用基类提供的服务 来扩展基类的行为。这种设计方法是正向的依赖关系。而依赖倒置原则强调的是一种反向依赖关系。在...
阅读全文
摘要:估计这篇对很多朋友都是有用的!!依赖是和变化紧密联系在一起的概念。由于依赖关系的存在,变化在某处发生时,影响会波及开来,造成很多修改工作,这就是依赖的危害。可以说变化是始作俑者,依赖是助纣为虐。我们可以不去拥抱变化吗?不可以。未来将是越来越不可预测,这是新经济最具挑战性的方面之一。商务和技术上的瞬息万变会产生变化,这既可以看作要防范的威胁,也可以看作应该欢迎的机遇。既然变化不可避免,我们所能做的...
阅读全文
摘要:当设计大型程序的时候,您必须时刻留心不同设计选项对诸如性能和可扩展性这样的特征的影响。随着软件产品的日渐复杂及其无所不在的部署,软件的“可测试性”也成了更重要的考虑事项。 彻底测试代码的重要性是显然的。花在编写测试和测试代码上的时间和精力给您带来的回报是维护成本的大幅降低。 然而,除非您很小心,否则您花在测试代码上的精力可能会首先达到花在编写代码上的精力的几倍!我曾看到程序员们齐心协力...
阅读全文
摘要:请先看一下我的分层结构DataAccess:数据访问层BusinessEntity:业务实体层BusinessRule:业务逻辑层WebUI:表示层WebUIController:表示层组件控制SystemFramework:本系统框架所遇到的问题以及解决方法我会相应地写出来1。不能把CRUD作为单独的事务处理封装在DataAccess层,因为只有BusinessRule层才有权力决定那些操作构成...
阅读全文
摘要:说明:我也是初学者,希望大家能提出宝贵意见。另外转载请注明作者左光和出处博客园,毕竟花费了很长时间才完成。 前言: 在网上搜索一下 MVC 模式,大部分都是和 Struts 、Spring 这些东东有关的,好像一说到MVC 模式,就必须和框架有关似的,费了半天劲仍然是晕晕乎乎,好在其中的观察者模式比较好理解,这两天正好又在听袁阔成的评书《三国演义》,于是就结合三国故事和观察者模式写下这一篇《三国演...
阅读全文
摘要:2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。 AOP技术在J...
阅读全文
摘要:0 引言 过去几年中,我们将敏捷方法应用于数据库设计,总结出一些技巧,使得当应用程序发展时,数据库也能够进化,这是敏捷方法的一个重要属性。我们的方法是通过持续集成以及自动重构,通过数据库管理人员(dba)和应用开发人员的紧密合作来设计数据库。这些技巧在应用开发的各个时期都有效。 1 敏捷方法学 近年来,出现了一种新的软件开发方法学——敏捷方法学。这给数据库设计提出了一些新的、巨大的需求。这些需求的...
阅读全文
摘要:一、问题的提出 笔者近几年一直从事信息系统的开发,特别是有关国家机关和企业信息系统的开发工作,取得了许多的经验和教训。其中一个深切的体会是,需求的不断变化,如果不能很好的应对,会导致整个项目的进度和质量都难以控制,最终使整个系统失败。特别是在我国,用户对于如何应用计算机软件并没有一个成熟的经验,在项目进行中用户会频繁的改变和增加各种要求。当最终完成系统的建设时,却发现企业的业务需求已经...
阅读全文
摘要:设计模式在某种程度上确实能够改善我们的程序结构,使设计具有更好的弹性。也正是由于这个原因,会导致我们可能过度的使用它。程序结构具有过度的、不必要的灵活性和程序结构没有灵活性一样都是有害的。本文将分析过度的灵活性可能造成的危害,并且结合一些实例来阐述使用设计模式改善程序结构应遵循的原则。 1、介绍 本系列文章的前两篇主要讲述了如何使用设计模式来改善我们的程序结构,大家可以看到经过调整的代码具...
阅读全文
摘要:在本系列的asp?ClassID=263'>.net/article/20050728152714814.html" target=_blank>第一篇文章中,描述了如何通过设计模式来指导我们的程序重构过程,并且着重介绍了设计模式意图、动机的重要性。在本文中我们将继续上篇文章进行讨论,这次主要着重于设计模式的适用性,对于设计模式适用性的掌握有助于从另一个不同的方面来判断一个设计模式是否真正适用于我...
阅读全文
摘要:设计模式是对特定问题经过无数次经验总结后提出的能够解决它的优雅的方案。但是,如果想要真正使设计模式发挥最大作用,仅仅知道设计模式是什么,以及它是如何实现的是很不够的,因为那样就不能使你对于设计模式有真正的理解,也就不能够在自己的设计中正确、恰当的使用设计模式。本文试图从另一个角度(设计模式的意图、动机)来看待设计模式,通过这种新的思路,设计模式会变得非常贴近你的设计过程,并且能够指导、简化你的设计...
阅读全文
摘要:在《在.Net中关于AOP的实现》我通过动态代理的技术,基本上实现了AOP的几个技术要素,包括aspect,advice,pointcut。在文末我提到采用配置文件方式,来获取advice和pointcut之间的映射,从而使得构建aspect具有扩展性。 细细思考这个问题,我发现使用delegate来构建advice,似乎并非一个明智的选择。我在建立映射关系时,是将要拦截的方法名和拦截需要实现...
阅读全文
摘要:一、AOP实现初步 AOP将软件系统分为两个部分:核心关注点和横切关注点。核心关注点更多的是Domain Logic,关注的是系统核心的业务;而横切关注点虽与核心的业务实现无关,但它却是一种更Common的业务,各个关注点离散地分布于核心业务的多处。这意味着,如果不应用AOP,那么这些横切关注点所代表的业务代码,就会分散在系统各处,导致系统中的每个模块都与这些业务具有很强的依赖性。在这里,所谓横切...
阅读全文
摘要:Resource Pool(资源池)模式已经在上一篇Post中露过脸了,这次让我们再对其看个仔细吧。Resource Pool模式是在应用程序开发中十分常见的一种模式,如果你使用过任何一个主流的应用服务器,如Tomcat,Weblogic,Websphere,Resin等等,对连接池(Connection Pool)的配置一定都不会陌生。我们从几乎无处不在的连接池就可以知道Reso...
阅读全文
摘要:Factory Method模式 一、模式概述 也许Factory Method模式是设计模式中应用最广泛的模式。在面向对象的设计中,关于对象的管理是其核心所在,而其中对象的创建则是对象管理的第一步。对象的创建非常简单,在C#中,只需要应用new操作符调用对象的构造函数即可,然而创建对象的时机却非常重要。 首先我们从对象的特征来看,代表抽象关系的类型,如接口和抽象类,是不能创建的,换句话说...
阅读全文
摘要:我在博客园上搜到各位大哥对于Bridge模式的相关介绍: 1、 设计模式随笔-蜡笔与毛笔的故事 2、 Bridge Strategy 和State的区别 3、 设计模式(16)-Bridge Pattern 4、 学习设计模式之Bridg...
阅读全文
摘要:首先需要申明的是本文不是介绍Bridge Strategy 和State模式,而是讨论它们的区别,所以需要你对它们先有所了解。 Bridge模式用一句话来说就是将抽象和实现分离。这句话如何理解,在《Design Pattern Explained》一书中做了很详细的解释。说实话,我现在已经记不清它是怎么说的了。 吕震宇对此也做了解释。 我是这样理解的:对一个事物进行抽象,得...
阅读全文