您现在的位置是:主页 > news > 专门做包包的网站/百度今日排行榜
专门做包包的网站/百度今日排行榜
admin2025/5/11 12:19:12【news】
简介专门做包包的网站,百度今日排行榜,中国即将全面疫情解封,东莞公司网站搭建多少钱设计模式--模板模式 模板模型原理 泡咖啡与泡茶的算法 泡咖啡步骤: 泡茶步骤: 水烧开 水烧开 冲泡咖啡粉 冲泡茶叶 把咖啡倒入杯子 把茶水倒…
设计模式--模板模式
模板模型原理
泡咖啡与泡茶的算法
泡咖啡步骤: 泡茶步骤:
水烧开 水烧开
冲泡咖啡粉 冲泡茶叶
把咖啡倒入杯子 把茶水倒入杯子
加糖和牛奶 加柠檬
思考 变化与不变化
代码讲解
Coffee
public class Coffee {public void prepareRecipe() {boilWater();brewCoffee();pourInCup();addSugarMilk();}public void boilWater(){System.out.println("boilWater");}public void brewCoffee(){System.out.println("brewCoffee");}public void pourInCup(){System.out.println("pourInCup");}public void addSugarMilk(){System.out.println("addSugarMilk");}
}
Tea
public class Tea {public void prepareRecipe() {boilWater();brewTea();pourInCup();addLemon();}public void boilWater(){System.out.println("boilWater");}public void brewTea(){System.out.println("brewTea");}public void pourInCup(){System.out.println("pourInCup");}public void addLemon(){System.out.println("addLemon");}}
MainTest
public class MainTest {public static void main(String[] args) {Coffee mCoffee = new Coffee();Tea mTea = new Tea();mCoffee.prepareRecipe();mTea.prepareRecipe();}
}
抽象冲泡算法
HotDrink
public abstract class HotDrink {public abstract void prepareRecipe();public void boilWater() {System.out.println("boilWater");}public void pourInCup() {System.out.println("pourInCup");}
}
模板模式的原理和设计
模板模式:封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现。模板模式可以使子类在不改变算法结构的
情况下,重新定义算法中的某些步骤
代码讲解
HotDrink
public abstract class HotDrink {public final void prepareRecipe(){boilWater();brew();pourInCup();addCondiments();}public final void boilWater() {System.out.println("boilWater");}public final void pourInCup() {System.out.println("pourInCup");}public abstract void brew();public abstract void addCondiments();}
Coffee
public class Coffee extends HotDrink{public void brew() {System.out.println("brewing coffee");}public void addCondiments() {System.out.println("Adding sugar and milk");}}
MainTest
public class MainTest {public static void main(String[] args) {HotDrink mCoffee = new Coffee();HotDrink mTea = new Tea();mCoffee.prepareRecipe();mTea.prepareRecipe();}
}
hook()方法可以重写,也可以选择不重写
HotDrink
public abstract class HotDrink {public final void prepareRecipe() {boilWater();pourInCup();brew();if(wantCondimentsHook()) {addCondimentsHook();}else {System.out.println("No Condiments");}}public boolean wantCondimentsHook() {return true;}public final void boilWater() {System.out.println("boilWater");}public final void pourInCup() {System.out.println("pourInCup");}public abstract void brew();public abstract void addCondimentsHook();
}
TeaWithHook
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class TeaWithHook extends HotDrink{public boolean wantCondimentsHook() {System.out.println("Cndiments, yes or no?please input(y/n):");BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String result = "";try {result = in.readLine();}catch(IOException e) {e.printStackTrace();}if(result.equals("n")){return false;}else {return true;}}@Overridepublic void brew() {System.out.println("brew Tea");}@Overridepublic void addCondiments() {System.out.println("adding lemon");}}
身边模板模式
排序鸭子
数组内置的sort版本
Comparable版本
Duck
public class Duck implements Comparable{String name = "";int weight = 1;public Duck(String name, int weight) {this.name = name;this.weight = weight;}public String toString() {return name + "weight:" + weight;}public int compareTo(Object arg0) {Duck buf = (Duck)arg0;if(this.weight > buf.weight) {return 1;}else if(this.weight < buf.weight) {return -1;}return 0;}
}
进行排序
Duck[] ducks = new Duck[10];
for(int i = 0; i < 10; i++) {ducks[i] = new Duck();//添加数据
}
Arrays.sort(duck);
好莱坞原则
好莱坞原则:别调用我们,我们会调用你(经纪人)
意义:高层无需知道调用底层的细节,解耦