zoukankan      html  css  js  c++  java
  • 设计模式(三)Template Method模式

      在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式。

      

      根据下面的示例程序理解模板方法模式。

     1 package BigJunOba.bjtu.TemplateMethod;
     2 
     3 public abstract class AbstractDisplay {
     4     
     5     public abstract void open();
     6     public abstract void print();
     7     public abstract void close();
     8     public final void display() {
     9         open();
    10         for (int i = 0; i < 5; i++) {
    11             print();
    12         }
    13         close();
    14     }
    15 }

      AbstractDisplay类是示例程序的核心。该类只实现了display方法,这个实现了的方法就是处理流程的框架。之后的子类都是按照这个框架来进行流程。(注意:这里的display方法是final方法,即子类不能继承这个方法也不能修改这个方法,只能调用这个方法。)

     1 package BigJunOba.bjtu.TemplateMethod;
     2 
     3 public class CharDisplay extends AbstractDisplay {
     4     
     5     private char ch;
     6     
     7     public CharDisplay(char ch) {
     8         this.ch = ch;
     9     }
    10 
    11     @Override
    12     public void open() {
    13         System.out.print("<<");
    14     }
    15 
    16     @Override
    17     public void print() {
    18         System.out.print(ch);
    19     }
    20 
    21     @Override
    22     public void close() {
    23         System.out.println(">>");
    24     }
    25     
    26 }

      作为子类之一的CharDisplay类可以对单个字符进行打印操作。

     1 package BigJunOba.bjtu.TemplateMethod;
     2 
     3 public class StringDisplay extends AbstractDisplay {
     4     
     5     private String string;
     6     private int width;
     7     
     8     public StringDisplay(String string) {
     9         this.string = string;
    10         this.width = string.getBytes().length;
    11     }
    12 
    13     @Override
    14     public void open() {
    15         printline();
    16     }
    17 
    18     @Override
    19     public void print() {
    20         System.out.println("|" + string + "|");
    21     }
    22 
    23     @Override
    24     public void close() {
    25         printline();
    26     }
    27     
    28     private void printline() {
    29         System.out.print("+");
    30         for (int i = 0; i < width; i++) {
    31             System.out.print("-");
    32         }
    33         System.out.println("+");
    34     }

      作为子类之一的StringDisplay可以对字符串进行操作。

     1 package BigJunOba.bjtu.TemplateMethod;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         AbstractDisplay d1 = new CharDisplay('H');
     6         AbstractDisplay d2 = new StringDisplay("Fighting, BigJun");
     7         d1.display();
     8         d2.display();
     9     }
    10 }

      main方法中,生成了CharDisplay和StringDisplay的示例,然后可以调用继承的display方法。实际的程序行为取决于CharDisplay类和StringDisplay类的具体实现。

     

    儿女情长什么的,最影响我们闯荡江湖了。
  • 相关阅读:
    html5-特殊符号的使用
    html5-表格
    html5-列表
    html5-绝对路径/相对路径
    html5-嵌入图片
    html5-超级链接
    html5-常用的文本元素
    html5-了解元素的属性
    Scanner类throwFor(Unknown Source)及跳过下一个扫描器分析
    有关HashMap的一些问题及解答
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/8671083.html
Copyright © 2011-2022 走看看