前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >策略模式

策略模式

作者头像
用户2436820
发布2019-01-07 13:39:16
4360
发布2019-01-07 13:39:16
举报

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 策略模式中专门有一个对象封装算法,以便于在运行时调用不通算法 实现一个策略模式

  1. 对一组对象按照其相关字段进行排序
  2. 排序采用简单的插入排序
  3. 封装一个transtion对象去实现排序规则算法(仔细看transtion封装的代码)
代码语言:javascript
复制
package com.snail.basic;

import java.util.Comparator;

public class Insertion {
    public static void sort(Object[] a, Comparator c){
        int N = a.length;
        for (int i = 1; i < N; i++) {
            for (int j = i; j >0 && less(c,a[j],a[j-1]); j--) {
                exch(a,j,j-1);
            }
        }
    }
    public static boolean less(Comparator c,Object v,Object w){
        return c.compare(v,w)<0;
    }
    public static void exch(Object[] a,int i,int j){
        Object t = a[i];
        a[i]=a[j];
        a[j]=t;
    }
    public static void main(String[] args) {
        // 随意几个对象 包含who when amount 等字段,按照不同字段排序
        Object[] a = new Object[5];
        Insertion.sort(a,new Transaction.WhoOrder());
        Insertion.sort(a,new Transaction.WnenOrder());
        Insertion.sort(a,new Transaction.HowMuchOrder());

    }
}
代码语言:javascript
复制
package com.snail.basic;

import java.util.Comparator;
import java.util.Date;

public class Transaction {
    private final String who = null;
    private final Date when = null;
    private final double amount = 0.0;
    public static class WhoOrder implements Comparator<Transaction>{
        @Override
        public int compare(Transaction v, Transaction w) {
            return v.who.compareTo(w.who);
        }
    }
    public static class WnenOrder implements Comparator<Transaction>{
        @Override
        public int compare(Transaction v, Transaction w) {
            return v.when.compareTo(w.when);
        }
    }
    public static class HowMuchOrder implements Comparator<Transaction>{
        @Override
        public int compare(Transaction v, Transaction w) {
            if(v.amount < w.amount) return -1;
            if(v.amount > w.amount) return +1;
            return 0;
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档