Java学习笔记8 关于策略模式
来源:互联网 发布:淘宝店铺搬迁 编辑:程序博客网 时间:2024/06/11 20:07
一 策略模式的描述
二 实现策略模式的简单例子
问题描述 :
代码 :
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Random;public class StrategyPattern {
/**
*
* 此方法用于随机生成一个字符串,用于人的姓名
* @param length
* @return
*/
public static String getRandomString(int length) { // length表示生成字符串的长度
String base = "abcdefghijklmnopqrstuvwxyz"; // 生成字符串从此序列中取
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}public static void main(String[] args) {
LinkedList list = new LinkedList(); //存放人的信息
for (int i = 0; i < 50; i++) { //随机生成50个人的信息
String id = "1000" + i;
String name = StrategyPattern.getRandomString(6);
int age = new Random().nextInt(80);
list.add(new Person(id, name, age));
}
//生成一个ID 比较器
PersonComparator personComparator = new PersonComparator(new IDComparator() );
Collections.sort(list, personComparator); //人按照ID进行排序
System.out.println(list);
personComparator.setComparator(new NameComparator());
Collections.sort(list, personComparator); //人按照Name进行排序
System.out.println(list);
personComparator.setComparator(new AgeComparator());
Collections.sort(list, personComparator); //人按照年龄进行排序
System.out.println(list);
personComparator.setComparator(new IDReverseComparator());
Collections.sort(list, personComparator); //人按照ID进行反向排序
System.out.println(list);
personComparator.setComparator(new NameReverseComparator());
Collections.sort(list, personComparator); //人按照Name进行反向排序
System.out.println(list);
personComparator.setComparator(new AgeReverseComparator());
Collections.sort(list, personComparator); //人按照ID进行反向排序
System.out.println(list);
}}
class Person {
String name;
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getId() {
return id;
}public void setId(String id) {
this.id = id;
}public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}String id;
int age;public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String toString(){
return id +"-" +name+"-" + age;
}
}/**
*
* 抽象策略类 ,比较两个Person
*
* @author Administrator
*
*/
class PersonComparator implements Comparator{
Comparator comparator;
public Comparator getComparator() {
return comparator;
}
public void setComparator(Comparator comparator) {
this.comparator = comparator;
}
public PersonComparator(Comparator comparator){
this.comparator = comparator;
}
@Override
public int compare(Object o1, Object o2) {
return this.comparator.compare(o1,o2);
}
}/**
*
* 具体比较策略实现类, 用于比较两个ID,大的id返回1 ,小的返回-1
*
* @author Administrator
*
*/
class IDComparator implements Comparator {@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
int a = Integer.parseInt(person.getId()); //id 转换为数字,然后进行比较
int b = Integer.parseInt(person1.getId());
return a==b?0 : a>b?1:-1 ;
}
}/**
* 具体比较策略实现类 ,用于比较两个姓名,大的姓名放回1 ,小的返回-1 , 如果姓名一样的话,按照ID进行比较
* @author Administrator
*
*/class NameComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
if(person.getName().equals(person1.getName())){
return new PersonComparator(new IDComparator()).compare(o1, o2); //姓名一样,用ID比较
}
return person.getName().compareTo(person1.getName());
}
}/**
* 具体比较策略实现类 ,用于比较两个年龄,大的年龄放回1 ,小的返回-1 , 如果年龄一样的话,按照ID进行比较
*
* @author Administrator
*
*/class AgeComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
if(person.getAge()==person1.getAge()){
return new PersonComparator(new IDComparator()).compare(o1, o2); //年龄意一样,用ID比较
}
return person.getAge()>person1.getAge()?1:-1;
}
}
class AgeReverseComparator implements Comparator {@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
return - new AgeComparator().compare(o1, o2);
}
}
class NameReverseComparator implements Comparator {@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
return - new NameComparator().compare(o1, o2);
}
}class IDReverseComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person person = (Person) o1 ;
Person person1 = (Person) o2;
return - new IDComparator().compare(o1, o2);
}
}
- Java学习笔记8 关于策略模式
- 关于Java策略模式
- 策略模式学习笔记
- 策略模式学习笔记
- java笔记 策略模式
- Java策略模式笔记
- java 设计模式 学习笔记(4) 策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- 学习笔记-轻量级Java EE:模式--策略模式
- java设计模式学习笔记2 策略模式
- java/android 设计模式学习笔记(17)---策略模式
- java设计模式学习笔记之策略模式
- 学习笔记——JAVA设计模式<18>策略模式
- JAVA学习笔记(6)_____Java 策略模式 Strategy Pattern
- Java学习笔记20 策略模式(Stratag…
- 策略类模式-学习笔记
- 策略模式(学习笔记)
- 策略设计模式--学习笔记
- 解析SQL语句的过程
- RMAN实例入门,备份与恢复
- 为程序员量身定制的12个目标
- Quartz.NET的管理工具
- ubuntu 8.04安装python django apache
- Java学习笔记8 关于策略模式
- 在对话框中设置背景的三种方法
- 单一职责原则(SRP)
- BW学习八(面试常见问题)
- 回顾大学--大一JAVA实验--实验一 Eclipse及Java入门
- Asp.Net MVC 把PartialView、View转换成字符串
- Oracle 事务的特征
- 回顾大学--大一JAVA实验--前言
- AT45DB041B中文资料-AT45DB041中文资料