模板设计模式

模板设计模式

开闭原则(OCP):一个软件实体如类、模块和函数应该对扩展开放、对修改关闭
模板设计模式是抽象类的一个实际应用场景

咖啡冲泡法
1.将水煮沸
2.用沸水冲泡咖啡
3.将咖啡倒进杯子
4.加糖和牛奶
茶冲泡法
1.将水煮沸
2.用沸水浸泡茶叶
3.把茶倒进杯子
4.加柠檬

举例:用代码实现咖啡和茶的类

1.冲泡咖啡类

class Coffee{
	public final void makeDrink(){
		this.boilWater();    //1.将水煮沸
		this.brewCoffee();    //2.用沸水冲泡咖啡
		this.pourInCup();     //3.将咖啡倒进杯子
		this.addSugerAndMilk();     //4.加糖和牛奶
	}
}

public void boilWater(){
	System.out.println("1.将水煮沸");
}

public void brewCoffee(){
	System.out.println("2.用沸水冲泡咖啡");
}

public void pourInCup(){
	System.out.println("3.将咖啡倒进杯子");
}

public void addSugerAndMilk(){
	System.out.println("4.加糖和牛奶");
}

2.冲泡茶类

class Tea{
	public final void makeDrink(){
		this.boilWater();
		this.brewTea();
		this.pourInCup();
		this.addLemon();
	}

	public void boilWater(){
		System.out.println("1.将水煮沸");
	}

	public void brewTea(){
		System.out.println("2.用沸水冲泡茶");
	}

	public void pourInCup(){
		System.out.println("3.把茶倒进杯子");
	}

	public void addLemon(){
		System.out.println("4.加柠檬");
	}
}

在上述中,因为茶和咖啡很相似,所以将他们共同的部分抽取出来,放在一个基类中

1.将水煮沸
2.用沸水冲泡饮料
3.把饮料倒进杯子
4.在饮料内加入适当的调料

抽象类基类实现

abstract class Drink{
	//被声明为final以免子类改变这个算法的顺序
	public final void makeDrink(){
		if(this.isHotWater()){      //是否是热水
			this.boilWater();      //1.将水煮沸
		}
		this.brewDrink();			 //2.沸水冲泡饮料
		this.pourInCup();			 //3.倒进杯子
		if(this.isAddOther()){       //是否加入其它辅料
			this.addOther();		   //4.加入其它辅料
		}
	}

	public final void boilWater(){
		System.out.println("1.将水煮沸");
	}

	public final void pourInCup(){
		System.out.println("3.倒进杯子");
	}
	public abstract void brewDrink();
	public abstract void addOther();

	public boolean isAddOther(){
		return false;
	}

	public boolean isHotWater(){
		return true;
	}
}

class Coffee extends Drink{
	public void brewDrink(){	
		System.out.println("2.用沸水冲泡咖啡");
	}
	
	public void addOther(){
		System.out.println("4.加入糖和牛奶");
	}
	
	public boolean isAddOther(){
		return true;
	}	
}

class Tea extends Drink{
	public void brewDrink(){
		System.out.println("2.用沸水冲泡茶");
	}

	public void addOther(){
		System.out.println("4.加入柠檬");
	}

	public boolean isAddOther(){
		return true;
	}

	public boolean isHotWater(){
		return false;
	}
}

class Test{
	public static void main(String[] args){
		Drink coffee = new Coffee();
		coffee.makeDrink();      //输出咖啡的过程
		System.out.println("-------------");

		Drink tea = new Tea();
		tea.makeDrink();       //输出茶的过程
	}
}
/*
1.将水煮沸
2.用沸水冲泡咖啡
3.倒进杯子
4.加入糖和牛奶
-------------
2.用沸水冲泡茶
3.倒进杯子
4.加入柠檬
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值