Java——模板設計模式和列舉類的實現
阿新 • • 發佈:2018-11-27
嘗試以MarkdownPad2方式寫部落格,感覺十分有條理,第一次使用花的時間較長,但是熟能生巧,後面會越用越熟練,更快吧~
1. 模板設計模式
(1).模板方法模式就是定義一個演算法的骨架,而將具體的演算法延遲到子類來實現
(2)優點:使用模板方法模式,在定義演算法骨架的同時,可以很靈活的實現具體的演算法,滿足使用者靈活多變的需求
(3)缺點:如果演算法骨架有修改的話,則需要修改抽象類
實現程式碼~
package pra_25; public class J_48 { public static void main(String[] args) { songetTime st=new songetTime(); System.out.println(st.getTime()); } } abstract class getTime{ public final long getTime(){ long s=System.currentTimeMillis(); code(); long e=System.currentTimeMillis(); return e-s; } public abstract void code(); } class songetTime extends getTime{ @Override public void code() { int i=0; while(i<10000){ System.out.println(i); i++; } } }
2.列舉類
列舉:是指將變數的值都列出來,變數的值只限於列舉出來的值的範圍內。如:一週只有七天。
列舉類的注意事項:
1)定義列舉類要用關鍵字enum
2)所有列舉類都是用Enum的子類
3)列舉類的第一行上必須是列舉項,最後一個列舉項後的分號是可以省略的,但是如果列舉類有其他的東西,這個分號就不能省略
4)列舉類可以有構造器。但必須是private的,它預設的也是private
5)列舉類也可以有抽象方法,但是列舉項必須重寫該方法
6)列舉在switch語句中可以使用
自定義實現列舉類:
package pra_25; public class J_49 { /** * @param args */ public static void main(String[] args) { //列舉方式1.空參構造 Week mon=Week.Mon; Week tue=Week.Tue; System.out.println(mon); //列舉方式2.有參構造 Week2 mon2=Week2.Mon; System.out.println(mon2.getName()); //列舉方式3.加了抽象類,抽象方法,只能定義一個匿名內部類,然後重寫其方法 Week3 mon3=Week3.Mon; mon3.show(); } } class Week{ //私有構造,不讓其他類建立本類物件 public static final Week Mon=new Week(); public static final Week Tue=new Week(); private Week(){ } } class Week2{ //私有構造,不讓其他類建立本類物件 public static final Week2 Mon=new Week2("週一"); public static final Week2 Tue=new Week2("週二"); private String name; private Week2(String name){ this.name=name; } public String getName() { return name; } } abstract class Week3{ //私有構造,不讓其他類建立本類物件 public static final Week3 Mon=new Week3("週一"){ public void show(){ System.out.println("週一"); } }; public static final Week3 Tue=new Week3("週二"){ public void show(){ System.out.println("週二"); } }; private String name; private Week3(String name){ this.name=name; } public String getName() { return name; } public abstract void show(); }
通過enum實現列舉類
package pra_25;
public class J_50 {
/**
* @param args
*/
public static void main(String[] args) {
//無參
Month j=Month.Jan;
System.out.println(j); //Jan
//有參
Month2 f=Month2.Feb;
System.out.println(f.getName());
//方法
Month3 m=Month3.Mar;
m.show();
}
}
//列舉方式1
enum Month{
Jan,Feb,Mar; //空參構造
}
//列舉方式2
enum Month2{
Jan("一月"),Feb("二月"),Mar("三月");
private String name;
private Month2(String name){
this.name=name;
}
public String getName() {
return name;
}
}
//列舉方式3
enum Month3{
Jan("一月"){
public void show(){
System.out.println("一月");
}
},Feb("二月"){
public void show(){
System.out.println("二月");
}
},Mar("三月"){
public void show(){
System.out.println("三月");
}
};
private String name;
private Month3(String name){
this.name=name;
}
public String getName() {
return name;
}
public abstract void show();
}
列舉類的常見方法
int ordinal()
int compareTo(E o)
String name()
String toString()
<T> T valueOf(Class<T> type,String name)
values()
這裡注意一下:因為尖括號或出現問題,所以這裡建議用<對<>進行處理
package pra_25;
import pra_25.J_50;
public class J_51 {
public static void main(String[] args) {
Month2 J=Month2.Jan;
Month2 F=Month2.Feb;
//列舉項都是由編號的
System.out.println(J.ordinal());//0
System.out.println(F.ordinal());//1
//比較的是編號
System.out.println(J.compareTo(F)); //-1
//獲取例項的名稱
System.out.println(J.name()); //Jan
//通過位元組碼物件,獲取列舉項
Month2 j2=Month2.valueOf(Month2.class,"Jan");
System.out.println(j2);
//獲取每一個列舉項
Month2[] arr=Month2.values();
for (Month2 month2 : arr) {
System.out.println(month2);
}
}
}