模板设计模式-实例

这篇具有很好参考价值的文章主要介绍了模板设计模式-实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模板设计模式-实例,设计模式

    在软件开发中,有时也会遇到类似的情况,某个方法的实现需要多个步骤(类似“请客”),其 中有些步骤是固定的(类似“点单”和“买单”),而有些步骤并不固定,存在可变性(类似“吃 东西”)。为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计 模式来对这类情况进行设计,在模板方法模式中,将实现功能的每一个步骤所对应的方法称 为基本方法(例如“点单”、“吃东西”和“买单”),而调用这些基本方法同时定义基本方法的执 行次序的方法称为模板方法(例如“请客”)。在模板方法模式中,可以将相同的代码放在父类 中,例如将模板方法“请客”以及基本方法“点单”和“买单”的实现放在父类中,而对于基本方 法“吃东西”,在父类中只做一个声明,将其具体实现放在不同的子类中,在一个子类中提 供“吃面条”的实现,而另一个子类提供“吃满汉全席”的实现。通过使用模板方法模式,一方面 提高了代码的复用性,另一方面还可以利用面向对象的多态性,在运行时选择一种具体子 类,实现完整的“请客”方法,提高系统的灵活性和可扩展性。 模板方法模式定义如下: 模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模 式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

    模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关 系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在 抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类 来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一 个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。

数据查询表多个情况下,存在很多冗余代码。getCapk函数的代码。getAid函数的代码query函数的代码都有点重复,但是又不完全相同。但是冗余代码太多了又什么好的设计模式能处理好这个情况?

 public List<EMV_CAPK> getCapk(int acquirerIdx) {

        SQLiteDatabase db = emvDbHelper.getReadableDatabase();
        List<EMV_CAPK> capkList = new ArrayList<>();

        String[] columns = {EmvDbHelper.rid,EmvDbHelper.capkIndex,
                EmvDbHelper.keyExp,EmvDbHelper.keyMod,EmvDbHelper.checksum};
        String selection = EmvDbHelper.acquirerId + " = ?";
        String[] selectionArgs = {String.valueOf(acquirerIdx)};
        Cursor cursor = db.query(
                EmvDbHelper.TABLE_CAPK,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null
        );
        while (cursor.moveToNext()) {
            EMV_CAPK emvCapk = createEMVCapkFromCursor(cursor);
            capkList.add(emvCapk);
        }
        cursor.close();
        db.close();
        return capkList;
    }
 public String query(int acquirerIdx) {
        String version = null;
        SQLiteDatabase db = emvDbHelper.getReadableDatabase();
        // 定义要查询的列
        String[] columns = {EmvDbHelper.tableVersion};
        // 设置查询条件
        String selection = EmvDbHelper.acquirerId + " = ?";
        String[] selectionArgs = {String.valueOf(acquirerIdx)};
        Cursor cursor = db.query(
                EmvDbHelper.TABLE_ACQUIRER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null
        );
        if (cursor.moveToFirst()) {
            // 尝试获取 tableVersion 列的索引
            int tableVersionIndex = cursor.getColumnIndex(EmvDbHelper.tableVersion);
            // 检查索引是否有效
            if (tableVersionIndex >= 0) {
                // 列存在,可以安全地访问
                version = cursor.getString(tableVersionIndex);
            }
        }
        cursor.close();
        db.close();
        return version;
    }

改良后的代码。

public abstract class DatabaseQueryTemplate {
    protected EmvDbHelper emvDbHelper;
    protected String tableName;
    public DatabaseQueryTemplate(EmvDbHelper emvDbHelper) {
        this.emvDbHelper = emvDbHelper;
    }
    public DatabaseQueryTemplate(EmvDbHelper emvDbHelper, String tableName) {
        this.emvDbHelper = emvDbHelper;
        this.tableName = tableName;
    }
    public Map<String, Object> executeQuery(String[] columnsToSelect, String selectionColumn, String selectionValue) {
        SQLiteDatabase db = emvDbHelper.getReadableDatabase();
        Cursor cursor = db.query(
                tableName,
                columnsToSelect,
                selectionColumn + " = ?",
                new String[]{selectionValue},
                null,
                null,
                null
        );

        Map<String, Object> result = new HashMap<>();
        if (cursor.moveToFirst()) {
            result = DatabaseUtil.getColumnValues(cursor, columnsToSelect);
        }

        cursor.close();
        db.close();
        return result;
    }

    protected abstract void processRow(Cursor cursor);
}
public class AidQuery extends DatabaseQueryTemplate {

    private List<Tables.AidTable> result;

    public AidQuery(EmvDbHelper emvDbHelper) {
        super(emvDbHelper, EmvDbHelper.TABLE_AID);
        result = new ArrayList<>();
    }
    public List<Tables.AidTable> getResult() {
        return result;
    }


    @Override
    protected void processRow(Cursor cursor) {

    }
}
   public String getAcqIndexList(String aid){
        AidQuery aidQuery = new AidQuery(emvDbHelper);
        String[] columnsToSelect = {EmvDbHelper.acquirerId,EmvDbHelper.aidIndex};
        String selectionColumn = EmvDbHelper.aid;
        String selectionValue = aid;
        Map<String, Object> result = aidQuery.executeQuery(columnsToSelect, selectionColumn, selectionValue);
        // 在这里可以根据需要处理 result,例如将其转换为字符串返回
        // 以下代码是示例,具体处理逻辑根据实际需求修改
        StringBuilder resultString = new StringBuilder();
        for (String columnName : columnsToSelect) {
            Object columnValue = result.get(columnName);
            if (columnValue != null) {
                resultString.append(columnValue);
            }
        }
        return resultString.toString();
    }
String acqIndexList = dbManager.getAcqIndexList(aid);
        Logs.d(TAG,"acqIndexList= "+ acqIndexList);

模板设计模式-实例,设计模式文章来源地址https://www.toymoban.com/news/detail-812954.html

到了这里,关于模板设计模式-实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式--模板模式

    1.1抽象类 1.2继承模板类 1.3使用

    2024年02月03日
    浏览(31)
  • Java设计模式 (一) 模板方法设计模式

    什么是模板方法设计模式? 模板方法设计模式是一种行为型设计模式,它定义了一个算法的骨架,并将一些步骤的具体实现延迟到子类中。模板方法模式可以帮助确保在算法的不同部分中保持一致性,同时也允许子类根据需要进行具体实现。 模板方法模式的关键特点包括:

    2024年02月12日
    浏览(45)
  • 设计模式(7)模板方法模式

    一、定义: 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。

    2024年02月12日
    浏览(44)
  • 设计模式(13):模板方法模式

    实现一个功能时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。 非常繁琐,各个框架,类库中都有它的影子,比如常见的有: 数据库访问的封装 Junit单元测试 servlet中关于doGet/doPost方法调用 spring框架中各种Template shire中权限认证和授权都用到

    2024年04月16日
    浏览(48)
  • 设计模式行为型——模板模式

    目录 模板模式的定义 模板模式的实现 模板模式角色 模板模式类图 模板模式举例 模板模式代码实现 模板模式的特点 优点 缺点 使用场景 注意事项 实际应用         模板模式(Template Pattern)属于行为型设计模式,又叫模版方法模式(Template Method Pattern),是指定义一个算法

    2024年02月13日
    浏览(38)
  • 设计模式:模板模式和策略模式混合使用

    有时单个设计模式并不能满足我们的业务需求,这个时候就要根据具体的业务来混合使用设计模式,其中模板模式和策略模式是比较常用的一个组合。模板模式可以定义这个逻辑的骨架,策略模式可以丰满具体细节的逻辑。 这个示例中,我们定义了一个策略接口和两个策略实

    2024年02月07日
    浏览(43)
  • 设计模式(六):模板方法模式(行为型模式)

    Template Method,模板方法:定义一个操作中的算法的骨架,而将一 些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即 可以重定义该算法得某些特定步骤。 举例说明 奶茶制作过程,第一步加牛奶,第二步加糖,第三步加其他配料。第三步对于不同口味的奶

    2024年02月21日
    浏览(46)
  • 设计模式之模板模式(C++)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处        模板模式是一种行为型的软件设计模式,在父类中定义了一个模板算法,只实现模板中的公共部分,将可变部分放在子类中实现,不同的子类对同一模板有不同的

    2023年04月10日
    浏览(38)
  • js设计模式:模板方法模式

    父类定义一个整体的模板框架,将具体的方法行为定义到子类中。 模板方法主要是封装行为中的固定部分,同时允许子类对方法进行扩展

    2024年02月22日
    浏览(44)
  • 设计模式【行为型】-- 模板方法模式

          模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤的具体实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法模式基于一个抽象类或接口定义算法的骨架,该骨架由一个模板

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包