策略模式题
来源:互联网 发布:mac中的照片在哪里 编辑:程序博客网 时间:2024/05/22 14:01
题目要求:
/**
* 有这样一个类* public class Person
* {
* private int age;
* private String name;
* private int id;
* }
*
// getter and setter
* 要求:假如有若干个类Person 对象存在一个List 当中,对他们进行排序,
* 分别按照名字 年龄、id 进行排序 (要有正序与倒序两种排序方式)。假如年龄
* 或者姓名重复,按照id的正序进行排序。要求使用策略模式进行。
*/
这是编写策略模式的步骤 以及策略模式的定义以及策略模式的角色
/**
* 策略模式定义了一系列的算法,并将每一个算法封装起来,
* 而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化
* @author Administrator
*
* —抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
*
*策略模式的编写步骤
–1.对策略对象定义一个公共接口。
–2.编写策略类,该类实现了上面的公共接口
–3.在使用策略对象的类中保存一个对策略对象的引用。
–4.在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值
*/
第一步:按照要求 有一个Person类,里面有id age name等属性存放在List里面,所以都是Person类型的,要使用泛型。<Person>。
写出它们的get set方法。
public class Person
{
private int id;
private String name;
private int age;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
第二步:定义一个公共的接口Strategy,里面声明了一个sort的方法,使用了泛型。
public interface Strategy
{
public void sort(List<Person> list);
}
第三步:实现具体策略角色:包装了相关的算法和行为。就是要求里面的排序规则,分别按照名字 年龄、id 进行排序 (要有正序与倒序两种排序方式)。假如年龄
或者姓名重复,按照id的正序进行排序。
package com.freedom.Test2;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class UpNameSort implements Strategy,Comparator<Person>
{
@Override
public void sort(List<Person> list)
{
Collections.sort(list,this);
}
public int compare(Person o1,Person o2)
{
int result = o1.getName().compareTo(o2.getName());
//如果两个名字相同,则按照Id排序
if(0 == result)
{
return o1.getId() - o2.getId();
}
return result;
}
}
第四步:环境角色Enviromrnt:持有一个策略类的引用,最终给客户端调用。代码实现:
import java.util.List;
public class Environment
{
private Strategy strategy;
public Environment(Strategy strategy)
{
this.strategy = strategy;
}
public Environment()
{
}
public void setStrategy(Strategy strategy)
{
//调用自己的sort方法
this.strategy = strategy;
}
public void sort(List<Person> list)
{
this.strategy.sort(list);
}
}
最后: 写一个客户端来测试一下:Client。
import java.util.ArrayList;
import java.util.List;
public class Client
{
public static void main(String[] args)
{
List<Person> list = new ArrayList<Person>();
Person p1 = new Person();
p1.setAge(10);
p1.setId(1);
p1.setName("Riven");
Person p2 = new Person();
p2.setAge(20);
p2.setId(2);
p2.setName("Lee");
Person p3 = new Person();
p3.setAge(30);
p3.setId(3);
p3.setName("YaSuo");
Person p4 = new Person();
p4.setAge(25);
p4.setId(4);
p4.setName("ALi");
Person p5 = new Person();
p5.setAge(32);
p5.setId(1);
p5.setName("ALi");
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
Environment env = new Environment();
UpNameSort up = new UpNameSort();
env.setStrategy(up);
env.sort(list);
for(int i = 0; i < list.size();i++)
{
Person p = list.get(i);
System.out.println("id: " + p.getId() + ", name: " + p.getName()+", age:" + p.getAge());
}
}
}
- 策略模式题
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- Eclipse 的快捷键 大全
- 使用两个stack对一个stack的内容进行反转
- shell数组
- Android消息提示:AlertDialog、Toast、Notification的使用
- POJ2398——Toy Storage
- 策略模式题
- Longest Palindromic Substring
- hdu 3460 Ancient Printer 字典树
- POJ---3278-Catch That Cow(BFS/deque)
- python 线程,GIL 和 ctypes
- 买票找零
- windows7下搭建robot framework环境指导
- CompressCU 函数
- 算法导论 13章 红黑树