8000 GitHub - habren/habren.github.io: Jason's Blog
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

habren/habren.github.io

8000

Repository files navigation

 <!doctype html>




<html class="theme-next mist" lang="zh-CN">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />

<meta http-equiv="content-language" content="zh-cn" />
<meta http-equiv="Window-target"content="_top">



  <meta name="google-site-verification" content="_lpnaoq9f4n68-jMrHuEIsB1kJO_6WMxvONibOMBdxM" />













  <meta name="author" content="郭俊 Jason" />




  
  
    
  
  <link href="//cdn.jsdelivr.net/fancybox/2.1.5/jquery.fancybox.min.css" rel="stylesheet" type="text/css" />







  

<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.min.css" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.1.0" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="Kafka,SQL,PostgreSQL,数据库,大数据,分布式,集群,云计算,云计算cloud,Java,设计模式" />




  


  <link rel="alternate" href="/atom.xml" title="技术世界" type="application/atom+xml" />




  <link rel="shortcut icon" type="image/x-icon" href="/img/sun.ico?v=5.1.0" />






<meta name="description" content="Java设计模式本项目主要记录《Java设计模式》系列文章对应的实例代码,具体的文章详见作者个人博客 http://www.jasongj.com  Java设计模式(一) 简单工厂模式不简单 Java设计模式(二) 工厂方法模式 Java设计模式(三) 抽象工厂模式 Java设计模式(四) 观察者模式  Java设计模式(五) 组合模式 Java设计模式(六) 代理模式 VS. 装饰模式">
<meta property="og:type" content="website">
<meta property="og:title" content="技术世界">
<meta property="og:url" content="http://www.jasongj.com/README.html">
<meta property="og:site_name" content="技术世界">
<meta property="og:description" content="Java设计模式本项目主要记录《Java设计模式》系列文章对应的实例代码,具体的文章详见作者个人博客 http://www.jasongj.com  Java设计模式(一) 简单工厂模式不简单 Java设计模式(二) 工厂方法模式 Java设计模式(三) 抽象工厂模式 Java设计模式(四) 观察者模式  Java设计模式(五) 组合模式 Java设计模式(六) 代理模式 VS. 装饰模式">
<meta property="og:locale" content="zh-CN">
<meta property="og:updated_time" content="2017-02-18T02:53:23.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="技术世界">
<meta name="twitter:description" content="Java设计模式本项目主要记录《Java设计模式》系列文章对应的实例代码,具体的文章详见作者个人博客 http://www.jasongj.com  Java设计模式(一) 简单工厂模式不简单 Java设计模式(二) 工厂方法模式 Java设计模式(三) 抽象工厂模式 Java设计模式(四) 观察者模式  Java设计模式(五) 组合模式 Java设计模式(六) 代理模式 VS. 装饰模式">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Mist',
    sidebar: {"position":"left","display":"hide","offset":12,"offset_float":0,"b2t":false,"scrollpercent":false},
    fancybox: true,
    motion: false,
    duoshuo: {
      userId: 'undefined',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="http://www.jasongj.com/README.html"/>





  <title>
  

  
     | 技术世界
  
</title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-CN">

  




<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-58959834-1', 'auto');
  ga('send', 'pageview');
</script>

<!--

  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?7dfdf667ba885e2b04d1c1cc561490f0";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>

-->

  <script type="text/javascript" async src = "//hm.baidu.com/hm.js?7dfdf667ba885e2b04d1c1cc561490f0">
  </script>









  
  
    
  

  <div class="container sidebar-position-left  ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">技术世界</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <h1 class="site-subtitle" itemprop="description">分享交流大数据领域技术,包括但不限于Storm、Spark、Hadoop等流行分布式计算系统,Kafka、MetaQ等分布式消息系统,MongoDB、Cassandra等NoSQL,PostgreSQL、MySQL等RDBMS以及其它前沿技术</h1>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-kafka">
          <a href="/tags/Kafka/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-list"></i> <br />
            
            Kafka
          </a>
        </li>
      
        
        <li class="menu-item menu-item-spark">
          <a href="/tags/Spark/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-life-bouy"></i> <br />
            
            Spark
          </a>
        </li>
      
        
        <li class="menu-item menu-item-big_data">
          <a href="/tags/big-data/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-cloud"></i> <br />
            
            大数据
          </a>
        </li>
      
        
        <li class="menu-item menu-item-machine_learning">
          <a href="/tags/machine-learning/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-cloud"></i> <br />
            
            机器学习
          </a>
        </li>
      
        
        <li class="menu-item menu-item-sql">
          <a href="/tags/SQL/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-database"></i> <br />
            
            SQL
          </a>
        </li>
      
        
        <li class="menu-item menu-item-java">
          <a href="/tags/Java/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-fire"></i> <br />
            
            Java
          </a>
        </li>
      
        
        <li class="menu-item menu-item-design_pattern">
          <a href="/tags/Design-Pattern/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-diamond"></i> <br />
            
            设计模式
          </a>
        </li>
      
<!--
      
-->
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
  <header class="post-header">

	<h2 class="post-title" itemprop="name headline"></h2>



</header>

    
    
      <h2 id="Java设计模式"><a href="#Java设计模式" class="headerlink" title="Java设计模式"></a>Java设计模式</h2><p>本项目主要记录《Java设计模式》系列文章对应的实例代码,具体的文章详见<a href="http://www.jasongj.com">作者个人博客</a> <a href="http://www.jasongj.com">http://www.jasongj.com</a></p>
<ul>
<li><a href="http://www.jasongj.com/design_pattern/simple_factory/">Java设计模式(一) 简单工厂模式不简单</a></li>
<li><a href="http://www.jasongj.com/design_pattern/factory_method/">Java设计模式(二) 工厂方法模式</a></li>
<li><a href="http://www.jasongj.com/design_pattern/abstract_factory/">Java设计模式(三) 抽象工厂模式</a></li>
<li><a href="http://www.jasongj.com/design_pattern/observer/">Java设计模式(四) 观察者模式 </a></li>
<li><a href="http://www.jasongj.com/design_pattern/composite/">Java设计模式(五) 组合模式</a></li>
<li><a href="http://www.jasongj.com/design_pattern/proxy_decorator/">Java设计模式(六) 代理模式 VS. 装饰模式</a></li>
</ul>

      <script>
        window.disqusProxy={
          shortname: 'jasongj',
          username: 'jasongj',
          server: 'comments.jasongj.com',
          port: 3724,
          adminAvatar: '/avatars/admin-avatar.jpg',
          identifier: 'README.html',
        };
        window.disqus_config = function () {
          this.page.url = window.location.href;
          this.page.identifier = window.disqusProxy.identifier;
        };
      </script>
    
  </div>


          </div>
          


          
  <div class="comments" id="comments">
    
      
      <link rel="stylesheet" href="/css/iDisqus.min.css" />
      <script src="/js/src/iDisqus.min.js"></script>

      <input type="checkbox" hidden="true" id="comment-toggle" disabled />
      <div id="comment"></div>
        
        <!--
        <p>本页共有 <span data-disqus-url="/README.html"></span> 条评论</p>
        -->

        <!--
        <ul id="popular-posts"></ul>
        -->
        <script>
            var disq = new iDisqus('comment', {
                forum: 'jasongj',
                api: 'http://comments.jasongj.com/disqus',
                site: 'http://www.jasongj.com',
                url: decodeURI('/README.html'),
                identifier: decodeURI('/README.html'),
                title: '',
                slug: 'README.html',
                mode: 3,
                trust: 'www.jasongj.com',
                timeout: 3000,
                popular: document.getElementById('popular-posts'),
                init: true,
            });
            disq.popular();
            disq.count();
        </script>
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      

      <section class="site-overview sidebar-panel sidebar-panel-active">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="//www.jasongj.com/img/WeChat_QR.png"
               alt="郭俊 Jason" height="160px" width="160px"/>
          <p class="site-author-name" itemprop="name">郭俊 Jason</p>
           
              <p class="site-description motion-element" itemprop="description"></p>
           
        </div>
        <nav class="site-state motion-element">

          
            <div class="site-state-item site-state-posts">
              <a href="/">
                <span class="site-state-item-count">47</span>
                <span class="site-state-item-name">日志</span>
              </a>
            </div>
          

          
            
            
            <div class="site-state-item site-state-categories">
              <a href="/categories/index.html">
                <span class="site-state-item-count">29</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            
            
            <div class="site-state-item site-state-tags">
              <a href="/tags/index.html">
                <span class="site-state-item-count">23</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

          <div class="feed-link motion-element">
            
              <a href="/atom.xml" rel="alternate" target="_blank">
                <i class="fa fa-rss"></i>
              RSS订阅
              </a>
            
              <a href="http://eepurl.com/bLDcFD" rel="external nofollow" target="_blank">
                <i class="fa fa-rss"></i>
              邮件订阅
              </a>
            
          </div>
        

        <div class="links-of-author motion-element">
          
            
              <span class="links-of-author-item">
                <a href="https://www.linkedin.com/in/jasongj" target="_blank" title="Linkedin" rel="external nofollow">
                  
                    <i class="fa fa-linkedin-square"></i>
                  
                  Linkedin
                </a>
              </span>
            
              <span class="links-of-author-item">
                <a href="mailto:jason.guo.vip@gmail.com" target="_blank" title="E-Mail" rel="external nofollow">
                  
                    <i class="fa fa-envelope-o"></i>
                  
                  E-Mail
                </a>
              </span>
            
          
        </div>

        
        

        
        
          <div class="links-of-blogroll motion-element links-of-blogroll-inline">
            <div class="links-of-blogroll-title">
              <i class="fa  fa-fw fa-globe"></i>
              Links
            </div>
            <ul class="links-of-blogroll-list">
              
                <li class="links-of-blogroll-item">
                  <a href="http://www.infoq.com/cn/profile/%E9%83%AD%E4%BF%8A" title="发表在InfoQ上的文章" target="_blank">发表在InfoQ上的文章</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="https://yuzhouwan.com/" title="博客推荐-宇宙湾" target="_blank">博客推荐-宇宙湾</a>
                </li>
              
            </ul>
          </div>
        

        


      </section>

      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy;  2015 - 
  <span itemprop="copyrightYear">2018</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">郭俊 Jason</span>


  
  
    <span class="copyrightHolder">
      &nbsp; | &nbsp; 沪ICP备16005463号-1 &nbsp;
    </span>
  

  
  
    <span class="post-count">
      &nbsp; | &nbsp; 总字数 &nbsp; 282.5k
    </span>
  

  
  
    <span class="post-comments-count">
      &nbsp; |  &nbsp;
      <a id="translateLink" href="javascript:translatePage();">繁體中文</a>
    </span>
   
</div>


<!--
<script type="text/javascript" src="http://www.arao.me/js/tw_cn.js"></script>
-->
<script type="text/javascript" src="/js/src/tw_cn.js"></script>
<script type="text/javascript">
var defaultEncoding = 2; //网站编写字体是否繁体,1-繁体中文,2-简体中文
var translateDelay = 0; //延迟时间,若不在前, 要设定延迟翻译时间, 如100表示100ms,默认为0
var cookieDomain = "http://www.jasongj.com/"; //Cookie地址, 一定要设定, 通常为你的网址
var msgToTraditionalChinese = "繁體中文"; //此处可以更改为你想要显示的文字
var msgToSimplifiedChinese = "简体中文"; //同上,但两处均不建议更改
var translateButtonId = "translateLink"; //默认互换id
translateInitilization();
</script>



        

        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>








  






  
  <script type="text/javascript" src="//cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js"></script>

  
  <script type="text/javascript" src="//cdn.jsdelivr.net/jquery.lazyload/1.9.3/jquery.lazyload.min.js"></script>

  
  <script type="text/javascript" src="//cdn.jsdelivr.net/velocity/1.2.3/velocity.min.js"></script>

  
  <script type="text/javascript" src="//cdn.jsdelivr.net/velocity/1.2.3/velocity.ui.min.js"></script>

  
  <script type="text/javascript" src="//cdn.jsdelivr.net/fancybox/2.1.5/jquery.fancybox.pack.js"></script>


<script type="text/javascript" src="//cdn.bootcss.com/fastclick/1.0.6/fastclick.js"></script>

  


  <script type="text/javascript" src="/js/src/utils.js?v=5.1.0"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.1.0"></script>



  
  

  

  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.0"></script>


  


  

    
    <!--
      <script id="dsq-count-scr" src="https://jasongj.disqus.com/count.js" async></script>
    -->
    

    
      <!--
      <script type="text/javascript">
        var disqus_config = function () {
          this.page.url = 'http://www.jasongj.com/README.html';
          this.page.identifier = 'README.html';
          this.page.title = 'README.html';
        };
        var d = document, s = d.createElement('script');
        s.src = 'https://jasongj.disqus.com/embed.js';
        s.setAttribute('data-timestamp', '' + +new Date());
        (d.head || d.body).appendChild(s);
      </script>
      -->
    

  




	





  





  





  






  





  

  
  <!--
  <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script>
  -->
  <script src="//cdn.staticfile.org/av-core/0.6.1/av-core-mini.js"></script>
  <script>AV.initialize("NM4EaDS1gLL02qsIqliTOYBL-gzGzoHsz", "kmS5yUFSvuaXtVA4MyRkINw4");</script>
  <script>
    function showTime(Counter) {
      var query = new AV.Query(Counter);
      var entries = [];
      var $visitors = $(".leancloud_visitors");

      $visitors.each(function () {
        entries.push( $(this).attr("id").trim() );
      });

      query.containedIn('url', entries);
      query.find()
        .done(function (results) {
          var COUNT_CONTAINER_REF = '.leancloud-visitors-count';

          if (results.length === 0) {
            $visitors.find(COUNT_CONTAINER_REF).text(0);
            return;
          }

          for (var i = 0; i < results.length; i++) {
            var item = results[i];
            var url = item.get('url');
            var time = item.get('time');
            var element = document.getElementById(url);

            $(element).find(COUNT_CONTAINER_REF).text(time);
          }
          for(var i = 0; i < entries.length; i++) {
            var url = entries[i];
            var element = document.getElementById(url);
            var countSpan = $(element).find(COUNT_CONTAINER_REF);
            if( countSpan.text() == '') {
              countSpan.text(0);
            }
          }
        })
        .fail(function (object, error) {
          console.log("Error: " + error.code + " " + error.message);
        });
    }

    function addCount(Counter) {
      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(Counter);

      query.equalTo("url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {
            var counter = results[0];
            counter.fetchWhenSave(true);
            counter.increment("time");
            counter.save(null, {
              success: function(counter) {
                var $element = $(document.getElementById(url));
                $element.find('.leancloud-visitors-count').text(counter.get('time'));
              },
              error: function(counter, error) {
                console.log('Failed to save Visitor num, with error message: ' + error.message);
              }
            });
          } else {
            var newcounter = new Counter();
            /* Set ACL */
            var acl = new AV.ACL();
            acl.setPublicReadAccess(true);
            acl.setPublicWriteAccess(true);
            newcounter.setACL(acl);
            /* End Set ACL */
            newcounter.set("title", title);
            newcounter.set("url", url);
            newcounter.set("time", 1);
            newcounter.save(null, {
              success: function(newcounter) {
                var $element = $(document.getElementById(url));
                $element.find('.leancloud-visitors-count').text(newcounter.get('time'));
              },
              error: function(newcounter, error) {
                console.log('Failed to create');
              }
            });
          }
        },
        error: function(error) {
          console.log('Error:' + error.code + " " + error.message);
        }
      });
    }

    $(function() {
      var Counter = AV.Object.extend("Counter");
      if ($('.leancloud_visitors').length == 1) {
        addCount(Counter);
      } else if ($('.post-title-link').length > 1) {
        showTime(Counter);
      }
    });
  </script>



  
<script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';        
    }
    else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>


  
  


  

  
  <script type="text/javascript">(function(){document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E'));var bdcs = document.createElement('script');bdcs.type = 'text/javascript';bdcs.async = true;bdcs.src = 'http://znsv.baidu.com/customer_search/api/js?sid=11273528160680594791' + '&plate_url=' + encodeURIComponent(window.location.href) + '&t=' + Math.ceil(new Date()/3600000);var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(bdcs, s);})();</script>


  <script type="text/javascript">$(document).ready(function(){$('.sidebar-toggle').trigger('click');$.get("http://comments.jasongj.com/disqus/count.php?limit=100", function(data){
          var getPath = function(url) {
            var path = document.createElement("a");
            path.href = url;
            return path.pathname;
          }
          data.response.forEach((item) => {
            path = decodeURI(getPath(item.link));
            $("span[identifier='" + path + "']").text(item.posts);
          });
        });});</script>

  <!--
  
    <script type="text/javascript">
    $(document).ready(function(){
      $.get("http://comments.jasongj.com/disqus/count.php?limit=100", function(data){
          var getPath = function(url) {
            var path = document.createElement("a");
            path.href = url;
            return path.pathname;
          }
          data.response.forEach((item) => {
            path = decodeURI(getPath(item.link));
            $("span[identifier='" + path + "']").text(item.posts);
          });
        });
    });
    </script>
  
  -->

<!-- mathjax config similar to math.stackexchange -->

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      processEscapes: true
    }
  });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>

<script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
</body>
</html>

About

Jason's Blog

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0