设计模式之03 Template Mthod模式

来源:互联网 发布:提高淘宝店铺流量 编辑:程序博客网 时间:2024/06/05 11:27
一、模板方法模式
    在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式。
    一些在模板方法中,我们可以使用抽象定义一个算法中的 一些步骤,模板方法确定他们的先后顺序,但方法的具体实现由子类负责。
二、模板方法举例

    
 2.1 AbstractDisplay类 
    该类为抽象类,其中定义了四个方法,分别是display(),open(),pring(),close()。
    display()方法中进行以下操作,调用open()方法,调用5次pringt方法,调用close()方法。
     open(),print(),close()方法为抽象方法,由子类实现。
    
  1. public abstract class AbstractDisplay {
  2. /**
  3. * 框架方法
  4. */
  5. public final void display(){
  6. open();
  7. for(int i = 0 ; i<5 ;i++){
  8. print();
  9. }
  10. close();
  11. }
  12. protected abstract void close();
  13. protected abstract void print();
  14. protected abstract void open();
  15. }
2.2 CharDisplay类
    该类继承AbstractDisplay类,用于显示字符。显示结果为<<hhhhhh>>
    
  1. public class CharDisplay extends AbstractDisplay {
  2. private char ch ;
  3. public CharDisplay(char ch) {
  4. this.ch = ch;
  5. }
  6. @Override
  7. protected void close() {
  8. System.out.println(">>");
  9. }
  10. @Override
  11. protected void print() {
  12. System.out.print(ch);
  13. }
  14. @Override
  15. protected void open() {
  16. System.out.print("<<");
  17. }
  18. }
2.3 StringDisplay类
    该类用于显示字符串。
    
  1. public class StringDisplay extends AbstractDisplay {
  2. private String str;
  3. public StringDisplay(String str) {
  4. this.str = str;
  5. }
  6. @Override
  7. protected void close() {
  8. printLine();
  9. }
  10. @Override
  11. protected void print() {
  12. System.out.println("|"+str+"|");
  13. }
  14. @Override
  15. protected void open() {
  16. printLine();
  17. }
  18. private void printLine() {
  19. System.out.print("+");
  20. for(int i = 0 ;i < str.getBytes().length;i++){
  21. System.out.print("-");
  22. }
  23. System.out.println("+");
  24. }
  25. }

2.4 测试类
    
  1. public class Main {
  2. public static void main(String[] args) {
  3. AbstractDisplay charDisplay = new CharDisplay('c');
  4. charDisplay.display();
  5. AbstractDisplay stringDisplay = new StringDisplay("Hello world");
  6. stringDisplay.display();
  7. }
  8. }
输出结果如下。

三、模板方法模式说明
    由抽象类定义方法,并定义方法的执行过程,子类实现具体方法。优点在于父类中模板方法中定义了算法,无需在每个子类中编写算法。
3.1 模板方法中的角色
    AbstractClass 抽象类
    抽象类中需要实现模板方法,并且声明模板方法中需要使用到的抽象方法。
    ConcreteClass 具体类
    该角色负责具体实现AbstractClass角色中的抽象方法。
0 0
原创粉丝点击