JavaSE之面向对象编程—抽象类与接口—— 2(模板设计模式——抽象类的实际应用)

                                                                                        模板设计模式——抽象类的实际应用
模板设计最终要的就是我们需要知道在jav开发中我们是开闭原则的:对于功能扩展开发,对于修改关闭。
用例子解释开闭原则的具体含义:

//练习
//模板设计模式:抽象类的一个实际应用场景。采用抽象类来实现模板设计
//1.星巴克咖啡冲泡法
//将水煮沸
//用沸水冲泡咖啡
//将咖啡倒进杯子
//加糖和牛奶
//2.星巴克茶冲泡法
//将水煮沸
//用沸水浸泡茶叶
//把茶倒进杯子
//加柠檬

// //(1)普通思维:
// //对于上面两个过程进行分析我们可以发现,它们有许多的共同之处:
// //就是前面的过程基本是一致的,只是在最后的添加东西少许部分不同
// //首先,将这两个过程抽象为类:(下面是我们的正常思维模式就是将两个过程抽象为两个类,在两个类中实现自己的过程)
// class Coffee{ 
// //将水煮沸
// public void boilwater(){
	// System.out.println("将水煮沸");
// }
// //用沸水冲泡咖啡
// public void coffeeBoilwater(){
	// System.out.println("用沸水冲泡咖啡");
// }
// //将咖啡倒进杯子
// public void putCoffee(){
	// System.out.println("将咖啡倒进杯子");
// }
// //加糖和牛奶
// public void putSuger(){
	// System.out.println("加入糖或者牛奶");
// }

// }


// class Tea{
// //将水煮沸
// public void boilwater(){
	// System.out.println("将水煮沸");
// }
// //用沸水浸泡茶叶
// public void teaBoilwater(){
	// System.out.println("用沸水浸泡茶叶");
// }
// //把茶倒进杯子
// public void putTea(){
	// System.out.println("把茶倒进杯子");
// }
// //加柠檬
// public void putLemmon(){
	// System.out.println("加柠檬");
// }
// }

// public class Lesson9Lian{
	// public static void main(String[] args){
		// //冲一杯咖啡
		// Coffee coffee=new Coffee();
		// coffee.boilwater();
		// coffee.coffeeBoilwater();
		// coffee.putCoffee();
		// coffee.putSuger();
		
	// System.out.println("-----------------------");
		
		// //泡一杯茶
		// Tea tea=new Tea();
		// tea.boilwater();
		// tea.teaBoilwater();
		// tea.putTea();
		// tea.putLemmon();
	// }
// }

// //(2)采用模板设计模式
// //对于冲咖啡和泡茶前面三个步骤是基本相同的,经过分析我们将所有的方法都放在一个抽象类中,
// //并且将这些所有的方法都作为泡茶或者泡咖啡的准备工作,定义一个prepar()方法,里面调用这些不同的步骤。
// //将相同的方法直接定义为普通方法放在抽象类中,将不同的方法定义为抽象方法,让子类去实现它,通过自己的方式。
// //将上述过程抽象为:
// //将水煮沸
// //用水冲泡
// //将饮料放进杯中
// //加入调料
// abstract class drinkBeverage{
	// final void prepar(){//我们不希望这个制作过程被子类修改,所以用final来修饰
		// boilwater();
		// brew();
		// putintoCup();
		// addSpices();
	// }
		// //下面将通用的方法实现以下,将不是通用的方法定义为抽象方法
		 // public void boilwater(){
			// System.out.println("将水煮沸");
		// }
	     // public void putintoCup(){
			// System.out.println("将饮料放入杯中");
		// }
		// public abstract void brew();
		// public abstract void addSpices();
		
// }
// //下面分别实现咖啡和泡茶类
// class Coffee extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水冲泡咖啡");
	// }
	// public void addSpices(){
		// System.out.println("加糖");
	// }
// }
// class Tea extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水冲泡茶叶");
	// }
	// public void addSpices(){
		// System.out.println("加柠檬");
	// }
// }
// public class Lesson9Lian{
	// public static void main(String[] agrs){
		// System.out.println("制作咖啡");
		// Coffee coffee=new Coffee();
		// coffee.prepar();
		// System.out.println("-------------------");
		// System.out.println("制作茶");
		// Tea tea=new Tea();
		// tea.prepar();
		
	// }
// }




// //(3)对于上面的方法我们可以继续修改第四部,对于添加调料这个步骤有些人是需要的,但是有些人并不需要
// import java.util.Scanner;
// abstract class drinkBeverage{
	// final void prepar(){//我们不希望这个制作过程被子类修改,所以用final来修饰
		// boilwater();
		// brew();
		// putintoCup();
		
		// if(customerWantsAddSpices()){
			// addSpices();
		// }
	// }
		// //下面将通用的方法实现以下,将不是通用的方法定义为抽象方法
		// public abstract void brew();
		// public abstract void addSpices();

		 // public void boilwater(){
			// System.out.println("将水煮沸");
		// }
	     // public void putintoCup(){
			// System.out.println("将饮料放入杯中");
		// }
		// //下面这个方法也叫做钩子方法
		// public boolean customerWantsAddSpices(){
			// return true;//默认为true,添加调料
		// }		
// }
// //下面分别实现咖啡和泡茶类
// class Coffee extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水冲泡咖啡");
	// }
	// public void addSpices(){
		// System.out.println("加糖");
	// }
	
	// //子类覆写钩子方法,实现自定义功能(通过用户输入实现是否添加调料)
	// public boolean customerWantsAddSpices(){
		// String answer=getUserInput();
		// if(answer.equals("y")){
			// return true;
		// }else {
			// return false;
		// }
	// }
	// public String getUserInput(){
		// String answer=null;
// System.out.println("您想要在咖啡中加入牛奶或唐糖吗?(y/n)");		
		// Scanner scanner=new Scanner(System.in);
		// answer=scanner.nextLine();
		// return answer;
	// }
// }
// class Tea extends drinkBeverage{
	// public void brew(){
		// System.out.println("用水冲泡茶叶");
	// }
	// public void addSpices(){
		// System.out.println("加柠檬");
	// }
// }
// public class Lesson9Lian{
	// public static void main(String[] agrs){
		// System.out.println("制作咖啡");
		// Coffee coffee=new Coffee();
		// coffee.prepar();
		// System.out.println("-------------------");
		// System.out.println("制作茶");
		// Tea tea=new Tea();
		// tea.prepar();
		
	// }
// }





















猜你喜欢

转载自blog.csdn.net/ZhuiZhuDream5/article/details/84302951