zoukankan      html  css  js  c++  java
  • 设计模式之模板模式

      在模板模式(Template Pattern)中,一个抽象类或接口公开定义了执行它的方法的方式/模板。它的子类或实现类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式,通常规定了某种既定的流程。  

    package 模板模式;
    /**
     * 抽象类的方式实现模板模式
     */
    public abstract class USBDevice1 {
    	public abstract void insert();
    	public abstract void work();
    	public abstract void pullOut();
    	
    	public void start(){
    		insert();
    		work();
    		pullOut();		
    	}	
    }
    
    class A extends USBDevice1{
    	public A() {
    		
    	}
    @Override
    public void insert() {
    	System.out.println("第一步:设备插入");	
    }
    
    @Override
    public void work() {
    	System.out.println("第二步:设备工作");	
    }
    
    @Override
    public void pullOut() {
    	System.out.println("第三步:设备拔出");	
    }
    }
    --------------------------------------
    package 模板模式;
    /**
     * 测试类
     * @author Administrator
     *
     */
    public class Test1 {
    	public static void main(String[] args) {
    		A a=new A();
    		a.start();
    	}
    }
    

      上面是通过抽象类的方式完成的模板模式。执行测试类,控制台打印如下:

    第一步:设备插入
    第二步:设备工作
    第三步:设备拔出
    

      我们还可以使用接口来完成模板模式,可以达到与上述代码同样的效果。

    package 模板模式;
    /**
     * 接口方式实现模板模式
     */
    public interface USBDevice2 {
    	public abstract void insert();
    	public abstract void work();
    	public abstract void pullOut();
    	
    	public default void start(USBDevice2 usb){
    		usb.insert();
    		usb.work();
    		usb.pullOut();
    	}
    }
    
    class B implements USBDevice2{
    
    	@Override
    	public void insert() {
    		System.out.println("第一步:设备插入");		
    	}
    
    	@Override
    	public void work() {
    		System.out.println("第二步:设备工作");		
    	}
    
    	@Override
    	public void pullOut() {
    		System.out.println("第三步:设备工作");		
    	}	
    }
    -----------------------------------------------------------------
    package 模板模式;
    /**
     * 测试类
     */
    public class Test2 {
    	public static void main(String[] args) {
    		USBDevice2 usb=new B();
    		usb.start(usb);
    	}
    }  
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8729462.html
Copyright © 2011-2022 走看看