Java——模板設計模式和枚舉類的實現

嘗試以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()

這裏注意一下:因爲尖括號或出現問題,所以這裏建議用&lt對<>進行處理

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);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章