设计模式:在编码过程中对通用的处理方式,方法进行抽取,精炼编程的方法
Java中常用的设计模式有23种。
开闭原则(OCP):类,模块,函数应该对修改关闭,对扩展开放,java的代码应遵循开闭原则
一个抽象类:定义模板方法,定义了一套执行逻辑顺序
几个抽象类的实现
如果煮饮品的过程是这样的:
public class TemplateDesignPattern{
public static void main(String[] args){
Coffer coffer = new Coffer();
coffer.boilCoffer();//煮咖啡的过程
Tea tea = new Tea();
tea.boilTea();//煮茶的过程
}
}
class Coffer{
public void boilCoffer(){
this.boilWater();
this.waterInputCup();
this.cofferInputWater();
this.sugarInputCoffer();
}
public void boilWater(){
System.out.println("1、烧水");
}
public void waterInputCup(){
System.out.println("2、水倒入杯子中");
}
public void cofferInputWater(){
System.out.println("3、咖啡倒入水中");
}
public void sugarInputCoffer(){
System.out.println("4、咖啡中加入糖");
}
}
class Tea{
public void boilTea(){
this.boilWater();
this.waterInputCup();
this.teaInputWater();
this.lemonInputTea();
}
public void boilWater(){
System.out.println("1、烧水");
}
public void waterInputCup(){
System.out.println("2、水倒入杯子中");
}
public void teaInputWater(){
System.out.println("3、茶倒入水中");
}
public void lemonInputTea(){
System.out.println("4、茶中加入柠檬");
}
}
那么有模板设计模式,那你煮饮品的过程会变为这个样子:
不希望被子类覆写的方法用final修饰
public class TemplateDesignPattern{
public static void main(String[] args){
Coffer coffer = new Coffer();
coffer.makeDrink();//煮咖啡的过程
Tea tea = new Tea();
tea.makeDrink();//煮茶的过程
}
}
abstract class Drink{
//制作饮品------>这就是模板,定义了一套执行逻辑顺序(算法:解决问题的一系列流程)
public final void makeDrink(){
this.boilWater();
this.waterInputCup();
this.mainIngredient();
this.minorIngredient();
}
//不希望被子类覆写:final
public final void boilWater(){
System.out.println("1、烧水");
}
public final void waterInputCup(){
System.out.println("2、水倒入杯子中");
}
//主料
public abstract void mainIngredient();
//辅料
public abstract void minorIngredient();
}
class Coffer extends Drink{
public void mainIngredient(){
System.out.println("3、咖啡倒入水中");
}
public void minorIngredient(){
System.out.println("4、咖啡中加入糖");
}
}
class Tea extends Drink{
public void mainIngredient(){
System.out.println("3、茶倒入水中");
}
public void minorIngredient(){
System.out.println("4、茶中加入柠檬");
}
}