Java Spring重要模式
Java Spring重要模式
夏至未至_super 发表于2年前
Java Spring重要模式
  • 发表于 2年前
  • 阅读 4
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

单列模式:

public class A{
    privateA(){}
    privatestatic A a = new A();
    publicstatic A getA(){
      return a;
    }
    
    privateA(){};
    privatestatic A a;
    publicstatic A getA(){
      if(a == null){
         synchronized(A.class){
             if(a == null){
               a = new A();
            }
         }
      }
      return a;
    }
}

工厂模式:

public class Factory {
    privatestatic Properties pro = new Properties();
    privatestatic Map map = new HashMap();
    static{
       try {
          InputStreamin = Factory.class.getResourceAsStream("/info.txt");
         pro.load(in);
      }  catch (IOException e) {
         e.printStackTrace();
       }
    }
   
    publicstatic Object getBean(String key){
      if(map.containsKey(key)){//判断map中是否存在键
          returnmap.get(key);
       }
      
       synchronized(map) {
         if(!map.containsKey(key)){
             StringclassPath = pro.getProperty(key);
             try {
                Class c =Class.forName(classPath);
                Object obj =c.newInstance();
               
                map.put(key,obj);
                returnobj;
             } catch(Exception e) {
               e.printStackTrace();
             }
          }
          else{
             returnmap.get(key);
          }
       }
       return null;
    }
}

代理模式:

public class DaoProxy implements InvocationHandler{
    privateObject target;
    privatestatic SessionFactory factory;
    static{
      Configuration cfg = new Configuration().configure();
      ServiceRegistry r = newServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
       factory =cfg.buildSessionFactory(r);
    }
   
    publicDaoProxy(Object target){
       this.target= target;
    }
    
    publicObject getProxy(){
       returnProxy.newProxyInstance(
            target.getClass().getClassLoader(),
            target.getClass().getInterfaces(), this);
    }

   @Override
   publicObject invoke(Object proxy, Method method, Object[] args)
          throwsThrowable {
       Sessionsession = factory.openSession();
       session.beginTransaction();
      
       ObjectreturnObj = null;
       try{
         //得到目标对象的setSession方法对象
         Method m =target.getClass().getMethod("setSession", Session.class);
         //执行setSession(),完成session属性的初始化
         m.invoke(target, session);
         
         //执行目标对象的目标方法,得到执行方法后的返回值
         returnObj =method.invoke(target, args);
         session.getTransaction().commit();
      }catch(Exception e){
         e.printStackTrace();
         session.getTransaction().rollback();
      }finally{
         session.close();
      }
      
      return returnObj;
    }

}


共有 人打赏支持
粉丝 0
博文 6
码字总数 1975
×
夏至未至_super
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: