设计模式之策略模式

来源:互联网 发布:js replace function 编辑:程序博客网 时间:2024/05/29 17:46

说明:

实例是对一个自定义对象按某种策略进行排序,为了增加排序的灵活性和模拟Java排序。需要创建Comparator和Comparable接口以满足需求。

//Comparable

package CategoryDP;
public interface Comparable<T> {
int compareTo(T o2);
}

//Comparator

package CategoryDP;
public interface Comparator<T> {
int compare(T o1,T o2);
}

//实现类

package CategoryDP;


public class CatLengthComparator implements Comparator<Cat>{//选择对象一属性进行比较策略


@Override
public int compare(Cat o1, Cat o2) {
if(o1.getLength()<o2.getLength())
return 1;
else
return 0;
}
}


//实现类

package CategoryDP;
/*
 * comparator 是实体实现具体 属性的排序
 * comparable 是完成比较
 * */
public class Cat implements Comparable<Cat>{
private int length;

//抽象出来的接口2
private Comparator comparator = new CatLengthComparator();//这里可以自定义实现类 使用配置文件进行更换
//抽象出来的接口1
@Override
public int compareTo(Cat o2) {
return comparator.compare(this, o2);
}
@Override
public String toString()
{return this.length+"";}



public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public Cat(int length) {
super();
this.length = length;
}
public Comparator getComparator() {
return comparator;
}




public void setComparator(Comparator comparator) {
this.comparator = comparator;
}
}


//排序工具类

package CategoryDP;


public class Tools {


public static void sort(Object[] arr) {
for(int i=0;i<arr.length;i++)
{
for(int j=1;j<arr.length-i;j++)
{
@SuppressWarnings("unchecked")
Comparable o1= (Comparable) arr[j-1];
Comparable o2=  (Comparable) arr[j];
int z = o1.compareTo(o2);
if(z==1)//前面大于后面  交换
{
Object temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] =temp;
}
}
}
}

public static void sort(int[] arr) {
for(int i=0;i<arr.length;i++)
{
for(int j=1;j<arr.length-i;i++)
{
if(arr[j]<arr[j-1])
{
arr[j] = arr[j]^arr[j-1];
arr[j-1] = arr[j]^arr[j-1];
arr[j] = arr[j]^arr[j-1];
}
}
}
}


public static void print(int[] arr) {
for(Integer i:arr)
{
System.out.print(i+",");
}
}
public static void print(Object[] arr) {
for(Object i:arr)
{
System.out.print(i+",");
}
}
}

///测试类

package CategoryDP;
/*
 * 排序方法:7种
 * 冒择路兮快对堆
 * 冒泡、选择、插入、希尔、快速、归并、多排序
 * */
public class Test {


/**
* @param args
*/
public static void main(String[] args) {
// int[] arr ={21,23,41,223};
Cat[] arr={new Cat(3),new Cat(55),new Cat(12),new Cat(122)};
Tools.sort(arr);
Tools.print(arr);
}


}

1 0