• Template(模板)模式


    第三章:模板模式

       Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理

        

       Code:

        

    package example.template;
    
    /***
     * 抽象类AbstractDisplay 其中抽象方法交给子类去实现
     * @author Administrator
     *
     */
    public abstract class AbstractDisplay {
    	public abstract void open();
    
    	public abstract void print();
    
    	public abstract void close();
    
    	public final void display() {
    		open();
    		for (int i = 0; i < 5; i++) {
    			print();
    		}
    		close();
    	}
    }
    
    package example.template;
    
    public class CharDisplay extends AbstractDisplay{
    
    	private char ch;
    	
    	public CharDisplay(char ch) {
    			this.ch = ch;
    	}
    	
    	@Override
    	public void open() {
    		System.out.print("<<");
    		
    	}
    
    	@Override
    	public void print() {
    		System.out.print(ch);
    	}
    
    	@Override
    	public void close() {
    		System.out.print(">>");
    	}
    
    }
    
    package example.template;
    
    public class StringDisplay extends AbstractDisplay{
    
    	private String string;
    	
    	private int width;
    	
    	public StringDisplay(String string) {
    		this.string = string;
    		this.width = string.getBytes().length;
    	}
    	
    	@Override
    	public void open() {
    		printLength();
    	}
    
    	private void printLength() {
    		System.out.print("+");
    		for(int i = 0; i < width; i++) {
    			System.out.print("-");
    		}
    		System.out.println("+");
    	}
    
    	@Override
    	public void print() {
    		System.out.println("|"+string+"|");
    	}
    
    	@Override
    	public void close() {
    		printLength();
    	}
    
    }
    
    package example.template;
    
    public class Main {
    	
    	public static void main(String[] args) {
    		//在父类中定义处理流程,在子类中具体实现,就是Template(模板)模式
    		AbstractDisplay abstractDisplay = new CharDisplay('H');
    		AbstractDisplay abstractDisplay2 = new StringDisplay("HelloWworld");
    		abstractDisplay2.display();
    		abstractDisplay.display();
    	}
    }
    

     不用去关系打印的内容,在类AbstractDisplay中定义了三个抽象方法和一个final方法,在使用时可以使用多态,执行display();方法,在display();方法中定义了过程实现,在子类中完成具体处理。

     这样写的好处是,在父类中编写了流程算法,就无需再子类中重复去写。

  • 相关阅读:
    [Err] 1168
    SpringAOP的运用方式——注解方式和XML配置方式
    展开运算符的理解
    find indexof findindex includes 的区别
    关于MVC MVVM的理解
    sync修饰符
    vue导航守卫
    输入网址到页面显示 经历了什么(转载)
    vue中侦听器的使用
    函数声明的三种方式
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/9745853.html
Copyright © 2020-2023  润新知