单例与代理模式

单例与代理模式
  单例模式
    1、私有的静态类变量
      public class Test {
        private static Test test = new Test();
        private Test(){}
        private static Test getTest(){
          return test;
        }
      }
    2、在一个方法里实例化对象
      public class Test{
        private static Test test;
        private Test(){}
        private static synchronized Test getTest(){
          if(test == null){
            test = new Test();
          }
          return test;
        }
      }
  代理模式
    1、静态代理模式
      public class Proty implements Inter {
        private Inter inter;
        public Proty(Inter inter) {
          this.inter = inter;
        }
        @Override
        public void play() throws Exception {
          System.out.println("进来了");
          inter.play();
        }
      }
    2、动态代理模式
      package com.lovo.dao.imp;
      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Method;
      import java.lang.reflect.Proxy;
      import org.hibernate.Session;
      import com.lovo.util.HibernateSessionFactory;
      public class MyProxy implements InvocationHandler {
        private BaseDao dao;
        public MyProxy(BaseDao dao) {
          this.dao = dao;
        }
        public Object getObject(){
          Object obj = Proxy.newProxyInstance(dao.getClass().getClassLoader(), dao.getClass().getInterfaces(), this);
          return obj;
        }
        @Override
        public Object invoke(Object arg0, Method arg1, Object[] arg2)
          throws Throwable {
          Object object = null;
          Session session = HibernateSessionFactory.getSession();
          session.beginTransaction();
          dao.setSession(session);
          try {
            object = arg1.invoke(dao, arg2);
            session.getTransaction().commit();
          } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
          }finally{
            session.close();
          }
          return object;
        }
      }
    备注:代理方法只是一种服务和正常的业务逻辑没有关系式一种横切面的关注点;其次代理模式需要通过接口来调方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值