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);
    	}
    }  
  • 相关阅读:
    Redis单实例数据迁移到集群
    使用IDEA快速搭建基于Maven的SpringBoot项目(集成使用Redis)
    Linux下Mysql每天自动备份
    java调用webservice
    springmvc后台生成验证码
    Zabbix 监控端口状态并邮件报警
    Zabbix 通过smtp 邮件报警
    Zabbix安装(server和agent)及基本配置
    Spark之 Spark Streaming整合kafka(Java实现版本)
    openlayer 5 获取中心点
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8729462.html
Copyright © 2011-2022 走看看