首页 文章 精选 留言 我的

精选列表

搜索[流量结构],共10000篇文章
优秀的个人博客,低调大师

设计模式(八)代理模式(结构型)

概述 为其他对象提供一种代理以控制对这个对象的访问。 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。 类图 代码 IGamePlayer接口对游戏玩家进行抽象: 1 public interface IGamePlayer { 2 public void killBoss(); 3 public void UpGrade(); 4 } GamePlayer实现IGamePlayer接口中的方法: 1 public class GamePlayer implements IGamePlayer { 2 private String name = null; 3 public GamePlayer(String name) { 4 super(); 5 this.name = name; 6 } 7 @Override 8 public void killBoss() { 9 System.out.println(this.name+"正在killBoss"); 10 } 11 @Override 12 public void UpGrade() { 13 System.out.println(this.name+"突然UpGrade"); 14 } 15 } GamePlayerProxy是代理类: 1 public class GamePlayerProxy implements IGamePlayer { 2 private IGamePlayer player = null; 3 public GamePlayerProxy(IGamePlayer player) { 4 super(); 5 this.player = player; 6 } 7 // 记录日志 8 private void log() { 9 System.out.println(new Date().toString() + "的时候在打怪"); 10 } 11 @Override 12 public void killBoss() { 13 this.log(); 14 player.killBoss(); 15 } 16 @Override 17 public void UpGrade() { 18 player.UpGrade(); 19 this.count(); 20 } 21 private void count() { 22 System.out.println("升了1级"); 23 } 24 } 测试: 1 public class Main { 2 public static void main(String[] args) { 3 IGamePlayer player = new GamePlayer("张三"); 4 IGamePlayer proxy = new GamePlayerProxy(player); 5 proxy.killBoss(); 6 proxy.UpGrade(); 7 } 8 } 优点 职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。 高扩展性 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3857245.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

设计模式(四)装饰模式(结构型)

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 具体被装饰者和抽象装饰类都继承于抽象被装饰者类,继承的是类型,而不是行为。行为来自装饰者和基础组件,或与其他装饰者之间的组合关系。 装饰者通常是用其他类似于工厂或生成器这样的模式创建的。 代码说明一切 package com.yydcdut.decorate; //被装饰者抽象类 public interface Phone { public void call(); } package com.yydcdut.decorate; //被装饰者具体类 public class RealPhone implements Phone { @Override public void call() { System.out.println("打电话。。。"); } } package com.yydcdut.decorate; //装饰者抽象类 public abstract class PhoneDecorate implements Phone { private Phone phone = null; public PhoneDecorate(Phone phone) { this.phone = phone; } @Override public void call() { this.phone.call(); } } package com.yydcdut.decorate; //装饰者的具体类 public class AfterPhone extends PhoneDecorate { Phone phone = null; public AfterPhone(Phone phone) { super(phone); this.phone = phone; } @Override public void call() { super.call(); System.out.println("打完电话。。。。"); } } package com.yydcdut.decorate; //装饰者的具体类 public class BeforePhone extends PhoneDecorate { Phone phone = null; public BeforePhone(Phone phone) { super(phone); this.phone = phone; } @Override public void call() { System.out.println("打电话之前。。。。。"); super.call(); } } package com.yydcdut.decorate; //测试类,主函数 public class PhoneMain { public static void main(String[] args) { Phone phone = new RealPhone(); phone.call(); System.out.println("-----------------------"); PhoneDecorate pd = new BeforePhone(phone); pd.call(); System.out.println("-----------------------"); pd = new AfterPhone(phone); pd.call(); System.out.println("-----------------------"); pd = new AfterPhone(new BeforePhone(phone)); pd.call(); } } 总结 1)继承属于扩展形式之一,但不见得是达到弹性设计的最佳方式。 2)在设计中,应该允许行为可以被扩展,而无须修改现有的代码。 3)组合和委托可用于在运行时动态地加上新的行为。 4)除了继承,装饰者模式也可以让我们扩展行为。 5)装饰者模式意味着一群装饰者类,这些类用来包装具体组件。 6)装饰者类反映出被装饰的组件类型(事实上,他们具有相同的类型,都经过接口或继承实现)。 7)装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。 8)可以用无数个装饰者包装一个组件。 9)装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。 10)装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。 Java的IO流也是用了装饰模式,BufferedInputStream/BufferedOutputStream/BufferedReader/BufferesWriter,比如: BufferedWriter bw = new BufferedWriter(new FileWriter(“abc.txt”)); 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3842898.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

IOS操作系统的层次结构

1、Core OS 核心层:包含Accelerate Framework、External Accessory Framework、Security Framework、System等几个框架,基本都是基于c语言的接口 2、Core Services核心服务层:包含Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Services Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch 、In App Purchase、Location Services、SQLite、XML Support等一些框架,也基本都是基于c语言的接口。 3、Mediah媒体层:包含Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、Core Media等等 4、 Cocoa Touch 触摸层:包括Address Book UI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework等等,这一层基本都是基于 Objective-c的接口 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

GO语言的数据结构测试

用于docker了,go也慢慢看一些。。 推荐书籍《go语言实践》就是<Go in Action>的中文版,有文字版PDF的。 package main import ( "fmt" ) //main is the entry of the program func main() { var array1 [5]string array2 := [5]int{10, 20, 30, 40, 50} array3 := [...]int{10, 20, 30, 40, 50} array4 := [5]int{1: 10, 2: 20} array2[2] = 35 array5 := [5]*int{0: new(int), 1: new(int)} *array5[0] = 10 *array5[1] = 20 array6 := [5]string{"Red", "Blue", "Green", "Yellow", "Pink"} array1 = array6 array7 := [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}} fmt.Println(array1, array2, array3, array4, array5, array6, array7) }

优秀的个人博客,低调大师

实时股票预测的开源参考结构

有这样一个传说,将人工智能和机器学习算法用于服务器农场后,你就可以搬家到夏威夷,在让机器交易的同时你终日躺在沙滩上享受生活。但是,问题在于交易市场是不断变化的:经济力量,新产品,竞争,世界事件,法规,甚至推特都是因素。虽然没有免费的午餐,在开放源码机器学习算法和数据分析平台的帮助下,公司仍然可以得到一个“更好,更健康,更便宜的午餐”。在股票市场中,查看历史股票价格并尝试用不同的模型来预测未来是一种常见的做法。 虽然这篇文章不能提供股票分析的细节,但它提出了一种用于解决大规模实时数据分析问题的方法,在一个可高度扩展和延伸性的参考架构下使用开放源代码工具。下面的架构专注于金融交易,但也适用于几乎任何一个行业的实时使用需求。关于这篇文章所讨论的构架的更多信息也可在网上通过Linux基金会,SlideShare,YouTube,和Pivot

优秀的个人博客,低调大师

HBase数据结构(读书笔记 )

背景: 最近在做一些跟大数据相关的东西,涉及到数据的存储和分析,考虑各个方面,选择使用HBase进行存储,使用原生Java API进行数据分析,之后会陆续写一系列来说明最近做的东西,给像我这样未曾涉及过这个领域的人一点儿idea。 引言: HBase以表的方式组织数据源,这一点跟关系型数据库时一样的,在我们的application里面,通过API/Thrift、或者各种SQL引擎,将数据存入库里面或者进行查询;Hbase的表由行(Row)和列(Column)共同构成,与关系型数据库不同的是,HBase有一个列族(Column Family)的概念,它将一列或者多列组织在一起,HBase的列必须属于某一个列族。 行和列的交叉点称为单元格(Cell),单元格是版本化的。单元格的内容也就是列的值是不可分割的字节数组,以二进制的形式存储。HBase没有数据类型,任何列值都被转换成字符数组进行存储。HBase表中的行是通过行键(Rowkey)来进行区分的,行健也是用来唯一确定一行的标识,不同的行健嗲表不同的行,行健也是一段字节数组,不论是字符串还是数字,最终都会被转换成自己数组进行存储。HBase表中的行是按照RowKey排序的,排序方式采用字典顺序,所有表中的行都必须有RowKey。 逻辑模型 HBase是一个类似GoogleBigTable的开源分布式数据库,它最基本的单位是列,一列或者多列组成行,行有行健,每一行的行健都是唯一的,相同的行健的插入操作被认为是对同一行的操作,也就是说如果做了两次写入操作,而行健是同一个,那么后面的操作可以认为是对改行的某些列的更新操作。 列名是右列族前缀和修饰符连接而成,分隔符是应为冒号。 物理模型 在逻辑模型中,表可以被看成一个稀疏的行的集合。但是在物理上,表是按照列分开存储的。HBase的列是按照列族分组的,HFile是面向列的,存放行的不同的列的物理文件,一个列族的数据存放在多个HFile中,最重要的是一个列族的数据会被同一个Region管理,物理上存放在一起。Region是管理HFile的一种机制。

优秀的个人博客,低调大师

Weex 框架中 JS Framework 的结构

Weex 具有移动端跨平台的特性,JS Framework 是其中比较关键的一层。首先来看一下 JS Framework 在 Weex 中的位置: 从图中可以看出 Weex 整体的工作流程。首先开发者可以声明式的定义组件,形成 .we 文件,通过 weex-toolkit 提供的工具将 .we 文件转为 JS Bundle。JS Framework 接收并执行 JS Bundle 的代码,并且执行数据绑定、模板编译等操作,然后输出 json 格式的 Virtual DOM 传递给移动端,同时也提供了 callNative 和 callJS 接口,方便 JS Framework 和 Native 的通信。同样的一份 json 数据,在不同平台的渲染引擎中能够渲染成不同版本的 UI,这也是 Weex 可以实现动态化的原因。 简而言之,JS

优秀的个人博客,低调大师

HBase与Zookeeper数据结构查询

一、前言 最近一年了吧,总是忙于特定项目的业务分析和顶层设计,很少花时间和精力放到具体的技术细节,感觉除了架构理念和分析能力的提升,在具体技术层次却并没有多大的进步。因为一些原因,总被人问及一些技术细节,很多细节都模糊了,花点时间,温习一下吧。技术部分将作为下一个阶段的工作重点。 二、操作说明 查看Zookeeper内部HBase相关数据,有两个主要的渠道:一、通过Hbase shell命令zk_dump查看;二、通过zk_cli.sh查看; 三、zk_dump 1 HBase is rooted at /hbase 2 Active master address: localhost,60000,1411261739960 3 Backup master addresses: 4 Region server holding hbase:meta: localhost,60020,1411261739301 5 Region servers: 6 localhost,60020,1411261739301 7 /hbase/replication: 8 /hbase/replication/peers: 9 /hbase/replication/rs: 10 /hbase/replication/rs/localhost,60020,1411261739301: 11 Quorum Server Statistics: 12 192.168.230.128:2181 13 Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT 14 Clients: 15 /192.168.230.128:54264[1](queued=0,recved=204,sent=212) 16 /192.168.230.128:54269[1](queued=0,recved=113,sent=113) 17 /192.168.230.128:54265[1](queued=0,recved=460,sent=507) 18 /192.168.230.128:54271[1](queued=0,recved=131,sent=131) 19 /192.168.230.128:54274[1](queued=0,recved=86,sent=86) 20 /192.168.230.128:54656[1](queued=0,recved=12,sent=12) 21 /192.168.230.128:54654[1](queued=0,recved=3,sent=3) 22 /192.168.230.128:54270[1](queued=0,recved=94,sent=94) 23 /192.168.230.128:54481[1](queued=0,recved=242,sent=242) 24 /192.168.230.128:54657[0](queued=0,recved=1,sent=0) 25 26 Latency min/avg/max: 0/1/155 27 Received: 1352 28 Sent: 1406 29 Connections: 10 30 Outstanding: 0 31 Zxid: 0x65 32 Mode: standalone 33 Node count: 38 四、zk_cli.sh 1 [zk: 192.168.230.128:2181(CONNECTED) 30] ls 2 ZooKeeper -server host:port cmd args 3 connect host:port 4 get path [watch] 5 ls path [watch] 6 set path data [version] 7 rmr path 8 delquota [-n|-b] path 9 quit 10 printwatches on|off 11 create [-s] [-e] path data acl 12 stat path [watch] 13 close 14 ls2 path [watch] 15 history 16 listquota path 17 setAcl path acl 18 getAcl path 19 sync path 20 redo cmdno 21 addauth scheme auth 22 delete path [version] 23 setquota -n|-b val path 24 [zk: 192.168.230.128:2181(CONNECTED) 31] ls / 25 [hbase, zookeeper] 26 [zk: 192.168.230.128:2181(CONNECTED) 32] ls /hbase 27 [meta-region-server, backup-masters, table, draining, region-in-transition, table-lock, running, master, namespace, hbaseid, online-snapshot, replication, splitWAL, recovering-regions, rs] 28 [zk: 192.168.230.128:2181(CONNECTED) 33] 五、说明 关于输出结果的解读,就不去细说了,感兴趣的兄弟,自己去问度娘吧。 莫愁前路无知己,夜漫自有早行人。大数据架构师技术交流: 347018601 作者:张子良 出处:http://www.cnblogs.com/hadoopdev 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册