需求如下:
实现对帐功能(两个平台用来保持数据一致性的一个方法)。有两种方式,一种是已经有完整的对帐记录,可直接拿来对帐,另一种只提供一个关键字,对帐之前需要先根据该关键字查询以获得对帐记录。
对帐功能在现有系统中已有两个版本的实现了:一种是定时对帐,另一种是手工填写信息进行对帐。这两种可归纳为同一种类型(即有现成的对帐记录了,直接对帐处理即可),但由于历史原因(不同的人开发的,为了简单的复用代码,第二个人拷贝的前一个人的代码),两个功能几90%的代码是一致的。
本次新加的两个功能,提供另外两种对帐方式,只填写对帐关键字,其它的信息需要在对帐的时候再临时去查询获得,考虑到以前的两个功能,于是对原有代码进行重构。初步考虑了如下两种实现方式:
1、提供对帐操作的抽象类,其中的对帐方法实现对帐的整个逻辑,包括参数校验、对帐、日志记录;并有一个抽象方法,获取对帐记录,由子类实现。然后两个子类继承该抽象类,分别实现根据现成的对帐记录对帐和根据关键字进行对帐操作。
2、提供对帐操作的类,其中的对帐方法实现对帐的整个逻辑,包括参数校验、对帐、日志记录;另外抽象出一个获取对帐记录的接口,提供两种实现,一种根据关键字查询获取对帐记录,另一种根据现有的对帐记录直接构造。对帐类中有一个获取对帐记录的实现类的一个引用,对帐操作时调用相应的方法获即可获得对帐记录。
第一种即为模版方法,第二种即为策略模式。
分享到:
相关推荐
继承是一种使一个类(子类)能够继承另一个类(父类)的所有属性和行为的机制。这种机制使得子类可以复用父类的成员方法和数据成员,从而减少了重复代码的数量,提高了代码的可维护性。在C++中,通过关键字`public`...
这篇文章通过一个错误使用继承和组合的例子,探讨了这两者的区别以及如何避免不当使用带来的问题。 首先,让我们理解什么是“继承”和“组合”。继承是面向对象编程中的一个概念,允许一个类(子类)继承另一个类...
这个简单的例子可能就是创建一个基本的对话框,包含一个组合框,然后添加几个选项,处理用户的选择变化。通过学习和理解这个例子,开发者可以了解如何在实际项目中有效地利用组合框控件。不过,由于提供的文件名称...
在面向对象编程中,继承是类之间的一种关系,允许一个类(子类或派生类)获取另一个类(父类或基类)的属性和方法。在Ext JS中,继承主要用于创建具有已有组件特性的新组件。通过`Ext.extend`方法,我们可以创建一...
在Android开发中,类别继承和对象组合是两种重要的面向对象编程概念,它们在...在这个例子中,开发者扮演了“愚公”的角色,使用Android提供的基础类和组件来构建一个简单的应用,展示了类别继承和对象组合的实际应用。
**继承**是面向对象编程中的一个重要特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和方法。在Python中,通过在子类定义时指定父类,我们可以轻松地复用和扩展已有代码。例如: ```python ...
通过继承,一个类可以从另一个类那里继承属性和方法,从而实现代码的复用;而通过组合,则是在类的设计中使用已有的类作为成员变量来构造新的类,这种方式也能够实现代码的复用,同时还能增加程序的灵活性。 #### ...
### Java编写的组合模式例子:建造一个工厂 #### 一、引言 组合模式(Composite Pattern)是一种结构型设计模式,允许将对象组合成树形结构,并以一致的方式处理单个对象与组合对象。该模式使得客户端代码可以一致...
这个"SSH整合继承DispatchAction的简单例子"是一个演示如何将这三个框架集成在一起,并利用Struts的DispatchAction来实现多请求分发的功能。 首先,让我们深入理解SSH框架的核心功能。Spring是一个强大的依赖注入...
在“Cars”这个例子中,可能包含多个与汽车相关的类,比如一个基础的Car类,以及继承自Car的Sedan(轿车)、SUV、SportsCar(跑车)等子类。这些子类可能通过多重继承从其他类(如Engine、Transmission、Wheels)中...
在这个例子中,`Parent`接口定义了一个名为`simpleCall`的方法,而`Child_A`和`Child_B`分别实现了该接口,并提供了自己的实现。通过`Parent`类型的引用`pa`,我们可以调用`Child_A`或`Child_B`的`simpleCall`方法,...
如果对象A需要使用对象B的功能,但是A和B之间并没有明显的“是一个”关系,这时应该优先考虑组合。 此外,继承和组合也可能会带来一些问题,比如“脆弱的基类问题”和“高耦合问题”。在使用继承时,如果基类中的...
例如,假设我们有两个函数 `add(a, b)` 和 `multiply(x, y)`,我们可以通过组合它们来创建一个新的函数 `compound_operation(func1, func2, a, b, c)`: ```c int add(int a, int b) { return a + b; } int ...
在这个例子中,我们将会探讨如何在MFC对话框中添加工具条(ToolBar)以及组合框(ComboBox)和编辑框(Edit Box),从而创建一个功能更丰富的用户界面。 首先,你需要创建一个新的MFC应用程序项目,选择"对话框基于...
JavaScript的继承机制使得一个对象能够从另一个对象那里获取属性和方法,从而实现代码的复用。主要有以下几种继承方式: 1. **原型链继承**:JavaScript的对象都有一个proto属性,指向创建它的函数的原型对象。通过...
VTK,全称为 Visualization Toolkit,是一个开源的三维可视化软件开发库,广泛应用于科学计算和工程领域。这个"VTK简单例子"提供了初学者一个入门VTK的起点,让我们深入了解一下VTK及其基本用法。 VTK的核心功能...
继承的另一个重要特性是多层继承,即一个类可以继承自另一个派生类,形成类的继承链。然而,C++只支持单一继承,也就是说,一个类只能有一个直接基类。但是,通过多重继承(多重派生),一个类可以从多个基类中继承...
本文将详细讲解如何在Android应用中结合使用TabHost和ListView,通过一个实际的小例子来阐述其工作原理和实现步骤。 首先,让我们了解一下TabHost。TabHost是Android SDK提供的一种用于创建多标签界面的容器。它...
1. 自定义组合控件:可能是一个包含输入框、按钮和标签的登录界面,所有这些元素在一个自定义View中被组合起来。 2. 重写控件:可能是对TextView的扩展,使其在文本过长时自动换行并显示省略号。 3. 示例代码:源码...
继承是Java中一种强大的特性,允许一个类(子类)从另一个类(父类)获取属性和方法。这有助于实现代码的重用,减少冗余,并创建类的层次结构。在Java中,使用`extends`关键字来表示继承,如`class Student extends ...