-
Notifications
You must be signed in to change notification settings - Fork 0
Jason's Blog
habren/habren.github.io
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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" > © 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"> | 沪ICP备16005463号-1 </span> <span class="post-count"> | 总字数 282.5k </span> <span class="post-comments-count"> | <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 0
No packages published