设计模式之单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之单例模式相关的知识,希望对你有一定的参考价值。

技术分享

代理模式

代理模式说明:

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

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

 

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();

    }

}

 

 

 

技术分享

以上是关于设计模式之单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Java 面试之单例模式

设计模式之单例模式

GOF23设计模式之单例模式

设计模式之单例模式

23种设计模式系列之单例模式

Java设计模式之单例模式