JAVA枚举与设计模式
Java枚举与程序设计作者:李金峰作者:李金峰l 枚举l 单例模式l责任链模式1.1一个枚举的小例子 package com.li;public enum WeeKDay MON,TUS,WED,THI,FRI,SAT,SUN;1.2枚举概述 关键字enum可以将一组具名的值的有限集合创作成一种新的类型,而这种具名的值可以作为常规的组件使用1.3 基本函数 l valueOf();l name();lOrdinal();ltoString();1.4静态导入package com.li;import static com.li.WeekDay1.*;public class TestStaticImport public static void main(String args)System.out.println(MON);1.5.1向enum中添加新方法1public enum WeekDay2 MON(1),TUS,WED,THI(4),FRI,SAT,SUN;private int value;private WeekDay2()private WeekDay2(int value)this.value=value;public int getValue()return this.value;1.5.2向enum中添加新方法2public enum WeekDay3 MON(Monday),TUS(Tuesday),WED(Wednesday),THI(Thursday),FRI(Friday),SAT(Saturday),SUN(Sunday);private String week;private WeekDay3(String week)this.week=week;public String getWeek()return this.week;1.6覆盖toString()方法public enum WeekDay5 MON,TUS,WED,THI,FRI,SAT,SUN;public String toString()return name().toLowerCase();1.6实现public enum WeekDay6 implements OperateMON,TUS,WED,THI,FRI,SAT,SUN;Overridepublic String doSomething()/TODO Auto-generated method stubreturn null;1.7随机选取public class Enums private static Random rand=new Random(47);public static T extends Enum T random(Class cl)return random(cl.getEnumConstants();public static T random(T values)return valuesrand.nextInt(values.length);l 枚举l 单例模式l责任链模式2 单例模式 l由于枚举的构造函数必须是私有的,所以用它实现单例模式非常简单。2.1单例实现1public enum Singleton INSTANCE;private String name;public String getName()return name;public void setName(String name)this.name=name;public static void main(String args)INSTANCE.setName(DS);System.out.println(INSTANCE.getName();2.2单例实现2public enum Singleton1 RED(255,0,0),GREEN(0,255,0),BLUE(0,0,255);int redValue;int greenValue;int blueValue;private Singleton1(int red,int green,int blue)this.redValue=red;this.greenValue=green;this.blueValue=blue;public int getRedValue()return redValue;public void setRedValue(int red)this.redValue=red;public int getGreenValue()return greenValue;public void setGreenValue(int green)this.greenValue=green;public int getBlueValue()return blueValue;public void setBlueValue(int blue)this.blueValue=blue;public static void main(String args)System.out.println(Singleton1.RED.getRedValue();l 枚举l 单例模式l责任链模式3 责任链模式 l责任链(Chain of Responsibility)是以多种不同的方式来解决问题,然后把他们链到一起。当一个请求来时,它遍历这个链,直到链中的某个解决方案能处理该请求。l下面以新入职员工经历的三方面考核为例。考核一:面试 60分以下 NO 考核二:笔试 60分以下 NO 考试三:绩效 60分以下 NO 每个员工都要经历这三个过程,一项不合格,拒绝转正。3.1绩效代码package com.li.thinking.chain;import java.util.Iterator;public class Performance enum Audition NO,YES1,YES2,YES3,YES4;enum Exam NO,YES1,YES2,YES3,YES4;enum Perform NO,YES1,YES2,YES3,YES4;Audition audition;Exam exam;Perform perform;static long count=0;long id=count+;public String toString()return Performance +id;public boolean check(Object o)if(o.equals(NO)return false;return true;public String getDetails()String result=toString()+Audition:+audition+Exam:+exam+Perform:+perform;if(result.indexOf(NO)0)result+=-Sorry,you are failed!;else result+=-You are successfull!;return result;public static Performance randomPerformance()Performance p=new Performance();p.audition=Enums.random(Audition.class);p.exam=Enums.random(Exam.class);p.perform=Enums.random(Perform.class);return p;public static Iterable generator(final int count)return new Iterable()int n=count;public Iterator iterator()return new Iterator()Overridepublic boolean hasNext()/TODO Auto-generated method stubreturn n-0;Overridepublic Performance next()/TODO Auto-generated method stubreturn randomPerformance();Overridepublic void remove()throw new UnsupportedOperationException();3.2评审代码package com.li.thinking.chain;public class ReView enum PerformanceHandler Audition boolean handle(Performance p)switch(p.audition)case NO:return false;default:return true;,Exam boolean handle(Performance p)switch(p.audition)case NO:return false;default:return true;,Perform boolean handle(Performance p)switch(p.audition)case NO:return false;default:return true;abstract boolean handle(Performance p);static void handle(Performance p)for(PerformanceHandler ph:PerformanceHandler.values()if(ph.handle(p)return;public static void main(String args)for(Performance pf:Performance.generator(10)handle(pf);System.out.println(pf.getDetails();Thank you!作者:李金峰