码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之单例模式

时间:2016-06-04 12:08:37      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

代理模式

代理模式说明:

代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。

 

1.      静态代理模式

UML图如下所示:

    技术分享

具体代码如下所示:

 

 package com.dai.proxy.staticproxy1;

/**

 * @author 戴礼明

 *日期: 2016-6-4

 *content: 接口

 */
public interface Subject {

    public void subjectProp();
}

 
package com.dai.proxy.staticproxy1;

/**

 *

 * @author 戴礼明

 *日期: 2016-6-4

 *content:物品

 */

public class RealSubject implements Subject{

    public RealSubject() ;
    }


    public void subjectProp() {
        System.out.println("我是真实的商品!");
    }
}


package com.dai.proxy.staticproxy1;

/**

 * @author 戴礼明

 *日期: 2016-6-4

 *content:代理subject类

 */

public class ProxySubject implements Subject{

    private RealSubject subject;

    public ProxySubject() {

       subject=new RealSubject();

    }

    public void subjectProp() {
       System.out.println("我代理了真实的商品!");
        subject.subjectProp();
    }
}

package com.dai.proxy.staticproxy1;

 

/**

 *

 * @author 戴礼明

 *日期: 2016-6-4

 *content:静态代理测试

 */

public class TestProxy {

    public static void main(String[] args) {

       new ProxySubject().subjectProp();

    }
}

 

 

2.    动态代理

UML图如下所示:

 

 技术分享

代码如下所示:

 

package com.dai.proxy.dynamicproxy1;

/**

 * @author 戴礼明
 *日期: 2016-4-17
 *content:动态代理中的动物接口
 */  

public interface Subject {

    public void subjectProp();
}

package com.dai.proxy.dynamicproxy1;

/**
 *

 * @author 戴礼明

 *日期: 2016-4-17

 *content:熊猫实现动物接口

 */

public class RealSubject implements Subject{


    public void subjectProp() {
        System.out.println("我是真实的产品!");
    }
}

package com.dai.proxy.dynamicproxy1;


import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

/**

 * @author 戴礼明

 *日期: 2016-4-17

 *content:熊猫类代理处理

 */

public class SubjectProxyHandler implements InvocationHandler{

      private Object proxied;

     public SubjectProxyHandler(Object proxied) {
        this.proxied=proxied;
    }

     
    public Object invoke(Object proxy, Method method, Object[] args)
           throws Throwable {
       System.out.println(method.getName());
       System.out.println("我是代理产品!");
        method.invoke(proxied, args);
        return null;
    }
}

 
package com.dai.proxy.dynamicproxy1;

import java.lang.reflect.Proxy;

/**

 * @author 戴礼明

 *日期: 2016-4-17

 *content:动态代理类

 */

public class DynamicProxy {

    public static void main(String[] args) {

         RealSubject realSubject=new RealSubject();

         SubjectProxyHandler handler=new SubjectProxyHandler(realSubject);

        Subject subject=(Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class},handler);

        subject.subjectProp();

    }

}

 

 

 

技术分享

设计模式之单例模式

标签:

原文地址:http://www.cnblogs.com/daiqiaobing/p/5558420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!