zoukankan      html  css  js  c++  java
  • 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;
    	}
    	
    }
    

      

  • 相关阅读:
    angular流程引擎集成
    angular打印功能实现方式
    文件hash、上传,实现文件上传重复验证
    HDU 6096 String(AC自动机+树状数组)
    HDU 5069 Harry And Biological Teacher(AC自动机+线段树)
    BZOJ 3172 单词(AC自动机)
    LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+DP)
    Codeforces 808G Anthem of Berland(KMP+DP)
    LightOJ 1258 Making Huge Palindromes(KMP)
    UVA 11019 Matrix Matcher(哈希)
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11976955.html
Copyright © 2011-2022 走看看