1. 程式人生 > >模版設計模式:線上購物流程

模版設計模式:線上購物流程

程式碼:

//模版設計模式:線上購物流程 (天貓,京東)
//瀏覽商品 -> 選擇商品 -> 客服服務 -> 快遞服務 -> 結算 -> 付款 -> 檢視訂單
public class Shopping{
	public static void main(String[] args){
		OnlineShopping tmall = new Tmall();
		OnlineShopping jd = new JD();
		System.out.println("天貓購物:");
		tmall.prepareRecipe();
		System.out.println("----------------------------------");
		System.out.println("京東購物:");
		jd.prepareRecipe();
	}
}

//網上購物是一個抽象類
abstract class OnlineShopping{
	final void prepareRecipe() { 
	browseProducts();
	selectProducts();
	if (customerWantsService()){
		customerService();
	}
	courierService();
	settlement();
	payment();
	checkOrder();
	}
	
	public void browseProducts(){
		System.out.println("瀏覽商品");
	}
	
	public void selectProducts(){
		System.out.println("選擇商品");
	}
	
	public void settlement(){
		System.out.println("結算");
	}
	
	public void payment(){
		System.out.println("付款");
	}
	
	public void checkOrder(){
		System.out.println("檢視訂單");
	}
	
	//因為天貓和京東的客服服務與快遞服務不同,將這兩個方法宣告為抽象,讓子類實現
	abstract void customerService();
	abstract void courierService();
	
	//判斷是否需要客服服務
	public boolean customerWantsService(){
		String answer = getUserInput();
		if(answer.equals("y")){
			return true;
		}else{
			return false;
		}
	}
	
	//詢問顧客的意見
	private String getUserInput(){
		System.out.println("您需要客服服務麼?(y/n)");
		java.util.Scanner scanner = new java.util.Scanner(System.in);
		String answer = scanner.nextLine();
		return answer;
	}
}

class Tmall extends OnlineShopping{
	public void customerService (){
		System.out.println("阿里旺旺服務");
	}
	
	public void courierService(){
		System.out.println("天貓直達服務");
	}
}

class JD extends OnlineShopping{
	public void customerService (){
		System.out.println("京東客服服務");
	}
	
	public void courierService(){
		System.out.println("京東配送服務");
	}
}

執行結果: