• 28 多线程(二)——静态代理设计模式


    引入

    在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如:

    new Thread(new xxx().start();//xxx为实现了Runnable的类
    

      

    Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread类创建一个线程。

    Thread就和装饰类的作用相似,都是包装一个对象。

    那么,静态代理设计模式的特点就是:

    • 代理者与被代理者都继承同一个接口(Thread与xxx继承的是Runnable接口)
    • 代理者类中有一个被代理者的示例
    • 代理者做绝大多数活

    示例

    接下来,我们做一个婚庆公司的静态代理。婚庆公司只需要传入一对新人,就可以为它们操办一切婚事。

    婚庆公司就是代理者,新人就是被代理人,它们实现同一个接口:结婚。

    package _20191203;
    /**
     * 静态代理设计模式
     * @author UID
     * 婚庆公司作为代理,为新人办婚宴
     */
    public class StaticAgentModel {
    	public static void main(String[] args) {
    		new MarryCompany(new Couple("小明","小红")).marry();
    		//是不是和new Thread(new xxx()).start();一样?
    		
    	}
    }
    
    interface Marry{//代理者与被代理者都需要实现的接口
    	void marry();
    }
    
    class Couple implements Marry{
    	private String groom;//新郎
    	private String bride;//新娘
    	
    	public Couple(String groom,String bride) {
    		this.groom = groom;
    		this.bride = bride;
    	}
    	@Override
    	public void marry() {
    		System.out.println(groom+"和"+bride+"双双入洞房...");
    	}
    }
    
    class MarryCompany implements Marry{
    	private Couple cp ;
    	@Override
    	public void marry() {//婚庆公司代理装饰
    		System.out.println("置办婚宴");//替换为方法会比较好
    		System.out.println("司仪主持");
    		cp.marry();
    		System.out.println("婚宴善后");
    	}
    	public MarryCompany(Couple cp) {
    		this.cp = cp;
    	}
    	
    }
    

      

  • 相关阅读:
    使用ansible 批量分发ssh密钥
    修改DNS
    如何使用openssl生成RSA公钥和私钥对
    压力测试 php-fpm 优化
    mysql 安装
    svn 权限配置
    powerdesigner导出word
    Mysql无法创建外键的原因
    office project 激活
    MySQL日志恢复误删记录
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11976955.html
Copyright © 2020-2023  润新知