第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!
----------- 分割线 ----------
考题抄错会做也白搭——模板方法模式
uml图:
代码中可能用到的地方:
1、很多类存在许多耦合,可以抽取模板父类
2、业务存在耦合,可以进行抽取模板,不考虑业务实现,但是业务结果是一致的
现在的电脑组装,也是个模板方法模式呢,电脑主要由主板、硬盘、处理器、显卡、显示屏、组成;
定义一个电脑类:
public abstract class Computer { public String board;//主板 public String caliche;//硬盘 public String cpu;//处理器 public String graphicsCard;//显卡 public String display;//显示屏 public abstract void board(); public abstract void caliche(); public abstract void cpu(); public abstract void graphicsCard(); public abstract void display(); public void assemble(){ board(); caliche(); cpu(); graphicsCard(); display(); System.out.println("组装电脑成功,电脑主板是:"+board+",硬盘是:"+caliche+",处理器是:"+cpu+",显卡是:"+ graphicsCard+",显示屏是;"+display); System.out.println(JSON.toJSONString(this)); } }
三星电脑实现类:
public class Samsung extends Computer { @Override public void board() { this.board = "三星主板"; System.out.println("组装上了"+board); } @Override public void caliche() { this.caliche = "256GB的SSD硬盘"; System.out.println("组装上了"+caliche); } @Override public void cpu() { this.cpu = "i7-8565U"; System.out.println("组装上了"+cpu); } @Override public void graphicsCard() { this.graphicsCard = "独立显卡4GB"; System.out.println("组装上了"+graphicsCard); } @Override public void display() { this.display = "13.3英寸显示屏"; System.out.println("组装上了"+display); } }
戴尔电脑实现类:
public class Dell extends Computer { @Override public void board() { this.board = "戴尔主板"; System.out.println("组装上了"+board); } @Override public void caliche() { this.caliche = "512GB的SSD硬盘"; System.out.println("组装上了"+caliche); } @Override public void cpu() { this.cpu = "i7-8550U"; System.out.println("组装上了"+cpu); } @Override public void graphicsCard() { this.graphicsCard = "GTX1050"; System.out.println("组装上了"+graphicsCard); } @Override public void display() { this.display = "15.6英寸显示屏"; System.out.println("组装上了"+display); } }
程序调用:
public class Main { public static void main(String[] args) throws CloneNotSupportedException { Computer samsung = new Samsung(); samsung.assemble(); System.out.println("---------分割线-----------"); Computer dell = new Dell(); dell.assemble(); } }
结果:
定义好了电脑模板,接下来去实现电脑模板就能组装出各种电脑了,这就是模板方法模式。
定义模板,但是不是由自己实现,谁需要产品实现模板,做出产品;代码、业务解耦。