精华内容
下载资源
问答
  • 宠物商店项目 我喜欢宠物项目,它们是使用图书馆和其他您在工作中无法使用的技术的很好借口。 最近,我一直在从事一个较大的宠物项目,该项目需要解析Go文件。在使用此类工具之前,我曾使用过ANTLR ,但不幸的是, ...

    宠物商店项目

    我喜欢宠物项目,它们是使用图书馆和其他您在工作中无法使用的技术的很好借口。 最近,我一直在从事一个较大的宠物项目,该项目需要解析Go文件。在使用此类工具之前,我曾使用过ANTLR ,但不幸的是, ANTLR的 Go目标性能很差。 因此,我开始搜索用纯Go语言编写的替代方法,并遇到了这种方法,它采用了不同的方法来创建Go分析器,但是在我们了解该库与其他库之间的区别之前,让我们介绍一些基本概念关于解析。

    抱歉,正在解析?

    为了“形式化”,这是维基百科必须说的:

    解析,语法分析或语法分析是按照自然语法,计算机语言或数据结构分析一串符号的过程,符合形式语法的规则。 解析一词来自拉丁语pars(orationis),意思是(语音的一部分)。

    现在,让我们尝试通过一个示例将其分解,如果您使用Go,您可能已经熟悉go.mod文件了。 但是如果您不使用它,go.mod文件将用于管理您的项目依赖项。 这是一个简单的go.mod文件:

    module github.com/matang28/go -latest
    
    go 1.13
    
    require (
      github.com/some/dependency1 v1 .2 .3
      github.com/some/dependency2 v5 .1 .0 // indirect
    )
    
    replace github.com/some/dependency1 => github.com/some/dependency1@dev latest

    在解析此文件之前,我们需要做两件事:

    1. 从文件本身获取的符号流。
    2. 语法定义将由解析器用来验证语法。

    第一个正式称为Lexer(或Lexing)。 Lexer就是将字符串转换为解析器使用的预定义符号列表,我们的语言使用的任何符号(或标记)都应由Lexer标识。 在我们的情况下,我们需要捕获以下令牌:

    1. 关键字: modulegorequirereplace
    2. 字符串如: github.com/some/dependency11.13
    3. 版本字符串,例如: v1.2.3v1.4.21-haijkjasd9ijasd
    4. 其他杂类符号,例如: => , // , ( , ) ,空格,行终止符和制表符。

    第二个将使这些标记具有语法含义,您可以看到go.mod文件遵循一些基本规则:

    1. 您必须使用module指令声明自己的模块名称。
    2. 您可以使用go指令声明go版本。
    3. 您可以使用require指令列出您的依赖项。
    4. 您可以使用replace指令替换某些依赖项。
    5. 您可以使用exclude指令排除某些依赖项。

    这些规则通常称为语言(go.mod语言)的语法,并且有一种更正式的表示方法,其中一种是EBNF标准:

    grammar GoMod;// A source file should be structured in the following way:
    sourceFile 		: moduleDecl stmt* EOF;
    
    stmt 			: (versionDecl | reqDecl | repDecl | excDecl);
    
    // The module directive:
    moduleDecl 		: 'module' STRING;
    
    // The version directive:
    versionDecl 	: 'go' STRING;
    
    // The require directive, it can be either a single line:
    // require github.com/some/dep1 OR multi line:
    // require (
    //   github.com/some/dep1
    //   github.com/some/dep2
    // )
    reqDecl 		: 'require' dependency
            		| 'require (' dependency* ')'
            		;
    
    // The replace directive:
    repDecl 		: 'replace' STRING '=>' dependency;
    
    // The exclude directive:
    excDecl 		: 'exclude' dependency;
    
    dependency 		: STRING version comment?;
    
    version 		: VERSION | 'latest' ;
    
    comment 		: '//' STRING;
    
    VERSION 		: [v]STRING+;
    STRING 			: [a-zA-Z0- 9 _+.@/-]+;
    WS  			  : [ \n\r\t\u000C]+ -> skip;

    现在回到定义,解析器将获取令牌流(例如,文本文件的令牌化),并尝试将每个令牌与语法进行匹配,如果我们的文件不遵循语法,则会出现解析错误,但是,如果我们的文件确实遵循语法,那么我们可以确定输入文件是有效的(就语法而言),并且可以获取解析树,我们可以遍历所有匹配的语法规则。

    解析的全部目的在于实现这种魔力……获取令牌流并从中构建解析树(如果语法与语法相匹配)。

    有什么不同?

    在本文开头,我曾说过一个库是创建这个宠物项目的火花,为什么呢?

    很好的解析树并不是从中提取数据的最舒适的数据结构,在解析树上“行走”可能会造成混乱。 当今可用的大多数工具都使用代码生成技术从语法文件生成词法分析器和解析器,并且为了尽可能通用,它们中的大多数都为您提供了一个侦听器接口,该接口将在解析器进入或退出每个语法规则时得到通知。 。

    参与者使用了不同的方法,这对于Go开发人员来说更常见。 它使用Go的结构系统表示语法(或更准确地说,是我们要从语法中捕获的部分),还使用“结构标签”来定义语法规则。

    哇! 那是一口气,让我们边做边学。 首先,我们需要一些表示标准`go.mod`文件的结构:

    // The root level object that represents a go.mod file
    type GoModFile struct {
    	Module     string
    	Statements []Statement
    }
    
    type Statement struct {
    	GoVersion    * string
    	Requirements []Dependency
    	Replacements []Replacement
    	Excludes     []Dependency
    }
    
    // A struct that represents a go.mod dependency
    type Dependency struct {
    	ModuleName string
    	Version    string
    	Comment    * string
    }
    
    // A struct that represents a replace directive
    type Replacement struct {
    	FromModule string
    	ToModule   Dependency
    }

    为了编写解析器,我们需要令牌流。 给分词给了我们一个基于正则表达式的词法分析器(他们的文档说他们一直在研究一种EBNF风格的词法分析器,因为这是分词法IMO中最繁琐的部分,因此可能非常有用)。 让我们看看实际情况:

    import (
    	"github.com/alecthomas/participle/lexer"
    )
    
    // The lexer uses named regex groups to tokenize the input:
    var iniLexer = lexer.Must(lexer.Regexp(
    	/* We want to ignore these characters, so no name needed */
    	`([\s\n\r\t]+)` +
    	/* Parentheses [(,)]*/
    	`|(?P<Parentheses>[\(\)])` + 	
    	/* Arrow [=>]*/
    	`|(?P<Arrow>(=>))` +
    	/* Version [v STRING] */
    	`|(?P<Version>[v][a-zA-Z0-9_\+\.@\-\/]+)` + 
    	/* String [a-z,A-Z,0-9,_,+,.,@,-,/]+  */
    	`|(?P<String>[a-zA-Z0-9_\+\.@\-\/]+)` ,
    ))

    现在我们可以继续定义语法,将其视为EBNF文件和Go结构表示形式之间的组合。 这是分词必须提供的一些基本语法运算符:

    1. 例如,使用引号将符号匹配: "module"将尝试与符号module匹配。
    2. 使用@捕获表达式(即在我们的词法分析器中定义的命名组),例如@String将匹配String符号并将其提取到struct字段中。
    3. 使用@@允许底层结构与输入匹配,这在您有多个规则替代项时很有用。
    4. 使用公共正则表达式运算符捕获组: *匹配零个或多个, +匹配至少一个, ? 匹配零或一,以此类推...
    // The root level object that represents a go.mod file
    type GoModFile struct {
    	Module     string      `"module" @String`
    	Statements []Statement `@@*`
    }
    
    type Statement struct {
    	GoVersion    * string       `( "go" @String )`
    	Requirements []Dependency  `| (("require" "(" @@* ")") | ("require" @@))`
    	Replacements []Replacement `| (("replace" "(" @@* ")") | ("replace" @@))`
    	Excludes     []Dependency  `| (("exclude" "(" @@* ")") | ("exclude" @@))`
    }
    
    // A struct that represents a go.mod dependency
    type Dependency struct {
    	ModuleName string  `@String`
    	Version    string  `(@Version | @"latest")`
    	Comment    * string `("//" @String)?`
    }
    
    // A struct that represents a replace directive
    type Replacement struct {
    	FromModule string     `@String "=>"`
    	ToModule   Dependency `@@`
    }

    现在我们要做的就是根据语法构建解析器:

    func Parse (source string ) (*GoModFile, error) {
    	p, err := participle.Build(&GoModFile{},
    		participle.Lexer(iniLexer),
    	)
    	if err != nil {
    		return nil , err
    	}
    
    	ast := &GoModFile{}
    	err = p.ParseString(source, ast)
    	return ast, err
    }

    至此,我们可以立即解析`go.mod`文件了! 让我们编写一个简单的测试以确保一切都按预期进行:

    func TestParse_WithMultipleRequirements (t *testing.T) {
    	file, err := Parse( `
      module github.com/matang28/go-latest
      go 1.12
      require (
      	github.com/bla1/bla1 v1.23.1 // indirect
      	github.com/bla2/bla2 v2.25.8-20190701-fuasdjhasd8
      )
    ` )
    	assert.Nil(t, err)
    	assert.NotNil(t, file)
    
    	assert.EqualValues(t, "github.com/matang28/go-latest" , file.Module)
    	assert.EqualValues(t, "1.12" , *file.GoVersion)
    	assert.EqualValues(t, 2 , len (file.Requirements))
    
    	assert.EqualValues(t, "github.com/bla1/bla1" , file.Requirements[ 0 ].ModuleName)
    	assert.EqualValues(t, "v1.23.1" , file.Requirements[ 0 ].Version)
    	assert.EqualValues(t, "indirect" , *file.Requirements[ 0 ].Comment)
    
    	assert.EqualValues(t, "github.com/bla2/bla2" , file.Requirements[ 1 ].ModuleName)
    	assert.EqualValues(t, "v2.25.8-20190701-fuasdjhasd8" , file.Requirements[ 1 ].Version)
    	assert.Nil(t, file.Requirements[ 1 ].Comment)
    
    	assert.Nil(t, file.Replacements)
    }

    宠物项目在哪里?

    为示例选择go.mod文件并非偶然,我决定构建的工具是一个简单的自动化工具。 如果在组织中使用Go,您可能知道手动编辑go.mod文件可能很繁琐。

    go-latest救援! go-latest将递归扫描go.mod文件,将与您的查询匹配的每个依赖项都修补为latest。

    例如,对于此文件树:

    .
    ├── go.mod
    ├── subModule1
    │   └── go.mod
    └── subModule2
        └── go.mod

    如果我想将与我的组织名称匹配的依赖关系修补到最新版本,请输入:

    $> go-latest ”organization.com” .

    看到?! 我告诉过你,宠物项目很有趣:),我不在乎我们可以通过使用简单的正则表达式来解决这个问题,因为这是宠物项目的本质!

    有关最新结帐的更多信息,请访问Github页面

    和往常一样,感谢您的阅读...

    图片积分(按其出现的顺序):

    1. Avi RichardsUnsplash上的照片
    2. Camylla Battani摄Unsplash
    3. Caleb WoodsUnsplash拍摄的照片
    4. 图片由CurologyUnsplash拍摄
    5. Josh RakowerUnsplash拍摄的照片

    翻译自: https://hackernoon.com/pet-projects-are-fun-yb1i369x

    宠物商店项目

    展开全文
  • 应用商店App描述秘籍:16个实例讲述

    千次阅读 2017-12-23 12:33:18
    应用商店App描述秘籍:16个实例讲述 本文列举了17个app描述,看看哪些是我们以前忽略了的,哪些是我们也犯过的错误。图中有红色背景的文字是需要强调的地方,这些应用均来自Google Play,不过你可以以此来研究App ...

    原创地址: http://mobile.51cto.com/market-408429.htm


    应用商店App描述秘籍:16个实例讲述

    本文列举了17个app描述,看看哪些是我们以前忽略了的,哪些是我们也犯过的错误。图中有红色背景的文字是需要强调的地方,这些应用均来自Google Play,不过你可以以此来研究App Store的应用。

    作者:佚名 来源:cocoachina| 2013-08-27 14:50

    【限时免费】年底最强一次云计算大会,看传统、社区、互联网企业如何碰撞?


    App描述很重要,很多人都知道,但你有没有亲自比较、研究过别人的app是如何描述的呢?

    毫无疑问,app描述页面不仅仅是描述,它更多是一个销售页面,开发者不能面对面向用户营销自己的产品,因此app描述页面的重要性就凸显出来了。

    如果你的应用是免费的,用户可能匆匆一眼扫过你的描述,因为是免费的,所以不会怎么仔细看,找到能吸引他下载的信息就行了。但对于付费app就不一样了,用户会阅读你的每句话,会查找每个详细的信息,因为这是要花钱的。

    本文列举了16个app描述,看看哪些是我们以前忽略了的,哪些是我们也犯过的错误。图中有红色背景的文字是需要强调的地方,这些应用均来自Google Play,不过你可以以此来研究App Store的应用。

    app描述是另一种类型的产品文案,跟其他行业的文案多少有共通的地方。

    1.简单明了 开门见山

    Viber:一款网络通话软件。最大特色是用户无需打开该应用就可以直接拨打VoIP电话。

    在“Read More”链接之前,Viber简洁明了地向用户传递了几个信息:1.功能-打电话、发短信、发送照片;2.支持多个平台-Android、iPhone、Blackberry以及WP;3.用户数量-1.75亿;4-免费。

    2. 让用户有“Read More”的欲望

    Scanner Radio Pro:款非常有趣的Android软件,它的功能在于能够让你利用Android手机来收听全世界各地的警察、消防部门、气象无线电和业余无线电爱好者发出的无线电电波。

    如果用户没有兴趣点击“Read More”查看软件更多详细信息,那你极有可能会失去用户。除了直中要点外,你还得保证你能“勾起”用户往下看的欲望。Scanner Radio Pro的描述给你的第一感觉是:非常酷,那它还能做些什么呢?这样可以让用户对app的其他细节更感兴趣。

    3.利用同情心理 引起用户兴趣

    Pig Rush:Pig Rush《小猪快跑》是一款有趣并且令人爱不释手的平台游戏,在游戏里你需要帮助小猪跳着逃离农场。在路上,你会遇到深谷、火堆和会动的平台。戴上防火帽会保护你不受火的伤害,吃掉超级猪饲料可以变成巨大的无敌猪!

    很少有无聊的推销能获得成功,同样,你的app描述也不能让人觉得无聊的想睡觉。Pig Rush的描述是非常有趣和吸引人的,让人有下载app,营救可怜小猪的冲动。

    4.砍去跟应用本身无关的信息  别指望用户会同情你

    从下边的图中可以看到,开发者写了一句“This is my first shot at app development so please bear with me”,如果是款免费的游戏,大家或许还会出于好奇下载,但若是付费应用,用户会觉得一个不怎么有经验的人开发出的app,售价0.99美元,还是不要冒 这个风险了。其实这个开发者想让人们产生同情心理来下载应用,但要掏钱的时候,用户一点都不马虎。

    5.利用用户好的评论 提高口碑营销的效果

    用户的评论可以告诉其他正在犹豫要不要下载应用的用户,用户积极的评论向潜在用户传递了一个信息,这个应用已经下载过了,非常好用。

    比如下边这个跟用女性例假周期的应用Period Calendar/Tracker。我们可以从应用商店收罗出一大把类似的应用,你的应用有什么特色吸引用户下载呢?在下载之前,谁也不知道应用好不好用,这时候别人积极的评价就非常有效果了。

    别走开,下页内容更精彩

    6.让新闻、杂志或者其他媒体为你代言

    印象笔记在app描述的第一句就说“New York Times Top 10 'Must-Have App'Winner”,纽约时报就为印象笔记做了一次免费代言,告诉用户一些非常有影响力的人正在使用这款有趣的,功能强大的app。

    此外科技媒体TechCrunch和Mashable也对它进行了评测和推荐。媒体代言当然有效,但产品质量也是一个必要条件。

    7.以项目符号形式列举应用价值

    你的应用足够特别才能吸引人下载,File Manager吸引人的价值定位(比如对FTP和Dropbox支持)让人们有下载使用的冲动,使用这个应用就能代替平台原始的文件管理。并且File Manager以项目符号的形式列出了主要功能,简洁有力且易读懂。

    8.列出应用的目标受众 主要是教育类app

    家长在为孩子们选择应用方面非常细心,除了关注应用的质量外,更关注适不适合孩子使用。如果你列出了受众年龄,无疑让妈妈们更放心。比如 Kids ABC Phonics,Kids ABC Phonics描述中注明了适合2-7岁的孩子。妈妈们不希望在孩子身上冒险,因此她们放心了才有可能下载你的app。

    9.让用户放心 尤其是付费类app

    你得让用户相信你是一个可靠的开发者,你要保证在用户有问题的时候可以联系上你。如果你能提供退款,那就以文字的形式标明自己的态度。

    10.写明app有多少个4-5星评价 不要不好意思

    如果你的app真的有大量4-5星的评价,你大可以在app描述中写出来,比如ROM Toolbox在描述中写app收到了13000个五星评价,多数用户的认可能帮你说服用户下载。

    11.写明下载量(适用于下载量比较可观的应用)

    如果应用有可观的下载量,你可以在app描述中说明,这可以表明你的应用非常有娱乐性质(游戏)或者非常有用(非游戏类应用)。OfficeSuite Pro 7开门见山地写出应用有超过1亿的下载量,超过4万的日注册用户量,这比其他什么都有说服力。

    这一点同样适用于app推广页面。

    别走开,下页内容更精彩

    12.展示你开发的其他app

    如果你开发过比较有名的app,你也可以在描述中透露这一点。如果用户认同你以前发布的app,那么他会认为你是一个成功的开发者,那么你发的新品也应该不错。

    13.描述中使用星号、箭头、心形以及其他符号

    描述中使用星号、箭头、心形以及其他符号来让你的app脱颖而出。比较下边两个应用的描述,看看第一感觉上那个更吸引你。

    14.使用屏幕截图展示app的精华所在

    先不说其他应用,Chrome深谙此道。在用户下载之前,它通过截图向用户展示了一些非常期待的功能。但不能否认Chrome的产品功能更是上乘。

    15. 写清楚app解锁功能

    如果你的app像《愤怒的小鸟》一样,用户只有达到一定水平才能解锁其他关卡,你要在app描述中写明了,在《愤怒的小鸟》比较难的关卡中,用户可以通过IAP购买Mighty Eagle来增加对小猪的攻击力。

    16.写明你的社交媒体上的账号(Facebook、Twitter等)

    为了增加你和应用的可信度,你可以在应用描述中添加社交媒体上的账号和网站地址。如果你有一个电子商务网站卖跟应用相关的设备,你可以添加进去。另外,你也可以添加YouTube上app视频链接。所有这些都是为了增加开发者、app以及品牌的可信度。

    上述只是列举了app描述注意事项中的部分内容,如果你有其他建议,欢迎留言,我们一起来总结!

    【编辑推荐】

    【责任编辑: milk TEL:(010)68476606】
    展开全文
  • 项目案例宠物商店.zip

    2019-05-15 22:57:31
    附带数据库,所有类名严格按照规范,代码工整,清晰易懂
  • 北大青鸟数据库项目-----宠物商店 1宠物商店Java 源代码(DAO) 2数据库的建表结构以及表中内容,都有展示 3效果展示图 数据库信息修改src目录下database.properties 文件
  • Java 数据库课程项目案例:宠物商店
  • 俏皮宠物在线商店 项目描述 这个电子商务应用程序(“嬉戏的宠物”)将帮助客户购买宠物配件,宠物玩具。 您可以在查看项目 UML图 ER图
  • 电子商务网上商店 项目描述: 数据库II最终项目的前端
  • Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠物商店  (本例定义的接口为标识接口,未定义任何方法,只用于标识) classes....

    Program:宠物商店的设计(继承,接口,线性线性表)

     

    Description:本题未实现图形用户界面,项目结构描述如下:

     

    classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠物商店

          (本例定义的接口为标识接口,未定义任何方法,只用于标识)

     

    classes.PetShop:宠物商店类,采用了单例设计模式

    classes.entity.Dog:宠物狗类,实现了Pet接口

    classes.entity.Cat:宠物猫类,实现了Pet接口

    main.TestDemo:测试类

     

    classes.Pet

     

     1 /*
     2  * Description:定义宠物标识接口,只要是实现此接口的类都为宠物类,都可放进宠物商店
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-10-18
     7  * 
     8  * */
     9 
    10 
    11 package classes;
    12 
    13 public interface Pet {
    14 
    15 }

     

    classes.PetShop

     

     1 /*
     2  * Description:定义宠物商店,采用单例设计模式
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-10-18
     7  * 
     8  * */
     9 
    10 
    11 package classes;
    12 
    13 import java.util.Iterator;
    14 import java.util.List;
    15 import java.util.ArrayList;
    16 
    17 public class PetShop {
    18 
    19     private List<Pet> pets = new ArrayList<Pet>();     //存取宠物
    20     private static PetShop instance = null;            //声明私有对象
    21     
    22     //定义私有构造方法
    23     private PetShop() {    }
    24     
    25     //取得宠物商店的实例
    26     public static PetShop getInstance() {
    27         
    28         if( PetShop.instance == null ) {
    29             
    30             PetShop.instance = new PetShop();
    31         }
    32         return PetShop.instance;
    33     }
    34     
    35     //取得宠物的数量
    36     public int getCount() {
    37         
    38         return this.pets.size();
    39     }
    40     
    41     //添加宠物
    42     public void add(Pet pet) {
    43         
    44         if( pet != null ) {
    45             
    46             this.pets.add(pet);
    47         }
    48     }
    49     
    50     //打印所有宠物
    51     
    52     public void displayInfo() {
    53         
    54         Iterator<Pet> ite = this.pets.iterator();
    55         while( ite.hasNext() ) {
    56             
    57             System.out.println( ite.next() );
    58         }
    59     }
    60     
    61 }

     

    classes.entity.Dog

     1 /*
     2  * Description:定义宠物狗类
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-10-18
     7  * 
     8  * */
     9 
    10 package classes.entity;
    11 
    12 import classes.Pet;
    13 
    14 public class Dog implements Pet {
    15     
    16     private String name;
    17     private String color;
    18     private int age;
    19     
    20     //定义构造方法
    21     
    22     public Dog() {}
    23     
    24     public Dog(String name, String color, int age) {
    25         
    26         super();
    27         this.name = name;
    28         this.color = color;
    29         this.age = age;
    30     }
    31 
    32     
    33     //定义setter()和getter()方法
    34 
    35     public String getName() {
    36         return name;
    37     }
    38 
    39     public void setName(String name) {
    40         this.name = name;
    41     }
    42 
    43     public String getColor() {
    44         return color;
    45     }
    46 
    47     public void setColor(String color) {
    48         this.color = color;
    49     }
    50 
    51     public int getAge() {
    52         return age;
    53     }
    54 
    55     public void setAge(int age) {
    56         this.age = age;
    57     }
    58 
    59     
    60     //覆写toString()方法
    61     @Override
    62     public String toString() {
    63         return "Dog [name=" + name + ", color=" + color + ", age=" + age + "]";
    64     }
    65 
    66 }

     

    classes.entity.Cat

     1 /*
     2  * Description:定义宠物猫类
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-10-18
     7  * 
     8  * */
     9 
    10 package classes.entity;
    11 
    12 import classes.Pet;
    13 
    14 public class Cat implements Pet {
    15 
    16     private String name;
    17     private String color;
    18     private int age;
    19     
    20     //定义构造方法
    21     
    22     public Cat() {}
    23     
    24     public Cat(String name, String color, int age) {
    25         
    26         super();
    27         this.name = name;
    28         this.color = color;
    29         this.age = age;
    30     }
    31 
    32     
    33     //定义setter()和getter()方法
    34 
    35     public String getName() {
    36         return name;
    37     }
    38 
    39     public void setName(String name) {
    40         this.name = name;
    41     }
    42 
    43     public String getColor() {
    44         return color;
    45     }
    46 
    47     public void setColor(String color) {
    48         this.color = color;
    49     }
    50 
    51     public int getAge() {
    52         return age;
    53     }
    54 
    55     public void setAge(int age) {
    56         this.age = age;
    57     }
    58 
    59     
    60     //覆写toString()方法
    61     @Override
    62     public String toString() {
    63         return "Cat [name=" + name + ", color=" + color + ", age=" + age + "]";
    64     }
    65     
    66 }

     

    main.TestDemo

     

     1 /*
     2  * Description:定义测试类,测试宠物商店
     3  * 
     4  * Written By:Cai
     5  * 
     6  * Date Written:2017-10-18
     7  * 
     8  * */
     9 
    10 package main;
    11 
    12 import classes.*;
    13 import classes.entity.Cat;
    14 import classes.entity.Dog;
    15 
    16 public class TestDemo {
    17 
    18     public static void main(String args[]) {
    19         
    20         //取得宠物商店的实例
    21         PetShop shop = PetShop.getInstance();
    22         
    23         //添加宠物
    24         shop.add( new Dog("小黑","黑色",2) );
    25         shop.add( new Dog("小白","白色",3) );
    26         shop.add( new Cat("小喵","黄色",1) );
    27         shop.add( new Cat("大喵","白色",3) );
    28         
    29         //打印所有宠物
    30         shop.displayInfo();
    31 
    32     }        
    33 
    34 }

     

     1 /* * 
     2  * Description:定义宠物商店,采用单例设计模式 
     3  *
     4  * Written By:Cai 
     5  * 
     6  * Date Written:2017-10-18 
     7  * 
     8  */
     9 
    10 package classes;
    11 import java.util.Iterator;
    12 import java.util.List;
    13 import java.util.ArrayList;
    14 public class PetShop {
    15     private List<Pet> pets = new ArrayList<Pet>();//存取宠物
    16     private static PetShop instance = null;//声明私有对象
    17     //定义私有构造方法
    18     private PetShop() {}
    19     //取得宠物商店的实例
    20     public static PetShop getInstance() {
    21         if( PetShop.instance == null ) {
    22             PetShop.instance = new PetShop();
    23         }
    24         return PetShop.instance;
    25     }
    26     //取得宠物的数量
    27     public int getCount() {
    28         return this.pets.size();
    29     }
    30     //添加宠物
    31     public void add(Pet pet) {
    32         if( pet != null ) {
    33             this.pets.add(pet);
    34         }
    35     }
    36     //打印所有宠物
    37     public void displayInfo() {
    38         Iterator<Pet> ite = this.pets.iterator();
    39         while( ite.hasNext() ) {
    40             System.out.println( ite.next() );
    41         }
    42     }
    43 }                                            

     

    转载于:https://www.cnblogs.com/caizhen/p/7701923.html

    展开全文
  • 项目描述 本节介绍可以在此应用程序上执行的操作,如何使用它以及它的技术是什么。 在此应用程序上执行的任务 技术说明 该SPA是整个MERN堆栈项目的一部分。 该项目的源代码可从 已封存: 该前端应用程序源代码位于...
  • 你需要把他们放进一个记事本文件中,正如我开篇所提到的,关键词频率虽然不再和往日那么重要,但是你仍然需要在你的应用描述中尽可能多的重复这些关键词,同时你也要保证描述内容具备较好的阅读性,例如假使你将相同...

    本片博文将着重介绍最重要的两个方法:Keywords及Description

    1、Keywords(关键词)
    当你不是很有号召力的发行者并且也不想完全依靠Android Market的‘Just in’section时,关键词就是你所拥有的全部了。

    关键词在用户搜索你的应用时显得尤为重要,在如下几种情形下对你更有特殊的用途:

    1. 用户经常使用搜索功能来发掘理想的App

    2. 你的应用出现在搜索结果的前列

      举个例子,”voice”和”reorder”就是两个非常棒的关键词,原因在于几乎没有任何Android设备会预装录音器这一应用,因此这两个关键词经常被用户所搜索。该道理同样适用于其他必备的应用软件,如Android上的文件管理器,备份管理器等等。
      关键词出现频率的重要性在2010年11月前显得非常重要。但之后,Android Market改变了搜索的算法,使得应用软件描述中的关键词出现频率不再重要。不过,关键词对于开发者的应用能否更容易被用户找到依然非常重要。那么,Android Market是如何决定你所开发的应用的排名位置呢,这将在另一篇博文中有所提及。
      当你真正以严肃认真的态度去针对关键词优化你的应用时,首先你要做的是找到一个很棒的关键词,然后去实现你的应用软件。

    【什么才是好的关键词?】
    有些关键词非常糟糕,因为用户很少或者从来都不会去搜索他们。那么你应该怎样去找到那些合适的关键词作为优化之用呢?
    第一步应该是仔细审视Android Market,键入一些关键词然后仔细观察搜索的结果。当你观察排位第一的应用时你会发现,是否它们是被意外搜索出来并且没有匹配上关键词的,亦或是它们与关键词真的有着某种关联。当没有任何应用能够匹配你所搜索的关键词时,要么就是你输入的关键词实在糟糕,再要么就是你的想法非常独特。如果你对所开发应用的描述关键词很有信心,并且应用自身也很新颖且对成千上万的用户都很有实用价值的话,不要犹豫赶快发布!但是如果情况不是那样,你就需要重新考虑你的idea或者 release an early candidate, produced afterPareto’s law (80:20)。
    如果发现有很多应用都匹配了你所搜索的关键词,你应该通过这些应用下载和评价的比率得出是否这些应用对于你的关键词是成功匹配的。这种方法也可以显示出你的关键词是否经常被搜索。当然你也可以在Google或者一些优秀的Android论坛搜索你经常想要的应用和经常用到的关键词。

    【关键词:How?】
    现在你大概知道应该用那些关键词去做应用市场优化了(可以是一系列关键词,比如不仅仅是”voice”和”recorder”,还可以是”recordings”,”speech recorder”,”sound”,”media player”等等)。你需要把他们放进一个记事本文件中,正如我开篇所提到的,关键词频率虽然不再和往日那么重要,但是你仍然需要在你的应用描述中尽可能多的重复这些关键词,同时你也要保证描述内容具备较好的阅读性,例如假使你将相同的关键词在你的内容中每两三个单词就重复一次,那一定会毁了你的应用说明文档并且会吓坏不少用户。你应该让每个句子都不显得冗余,并且不要让用户过于明显的意识到你是在堆砌关键词。
    下面给大家举个很差劲的示例:
    “Keywords:angry birds, birds are angry, rio, bird, …”
    接下来是一个正面示例(来自一款名为”Farm Tower”的应用说明文档):
    “… will lovethe cute animals (pig, cow, chick, chicken, sheep, horse, bull, cat, no angrybirds though ? ) and the funny sounds …”
    相信大家都发现这两个示例的差距在哪里了。想要在关键词上获益于一些众人皆知且口碑不错的应用确实是个好想法,但是不要太过于明显了…
    根据以往的经验,平均每个句子中出现一个关键词是一个不错的选择。

    【关键词:Where?】
    看起来似乎应用的标题与其说明相比,应用的标题应当与应用自身具有更强的关联性。如果有可能的话,你应当将最能描述应用功能及与之关联性最强的关键词作为应用的名称。比如说,AL Voice Recorder之于”Voice”,”Recorder”,3D Invaders之于“3D Game”,”3D”。或者,你也可以选择在你的开发者名称中加入关键词,虽然我没有这么做过。
    关键词的滥用
    当你过于明显的去滥用关键词,那么某一天中会发生:你的应用被踢出Android Market。我想这绝对不是你的初衷。某些热门的应用在其说明中仍然以“Tags”或者“Keywords”开头,但是正如我在“How to not get kicked out of Android Market(如何不被踢出Android Market)”中所提到的那样,将来一定会有一天这些应用会从Android Market中消失。
    总而言之
    将上面的陈述汇总成一个结论就是:归纳出好的的关键词,以用户可以接受的恰当的方式尽可能多的去使用。Android Market好的一方面是你可以在一天之内看到看到发生的变化,但另一方面是当你每进行一次SEO(搜索引擎优化),网络爬虫会在至少两周后才会索引到。
    2、Description(应用描述)
    这一部分,相对于本篇的关键词章节来说只占该博文的很小一部分。虽然如此,我还是希望这部分内容同样也会对你有用。
    应用的描述和关键词之间虽然有区别,但更有着很强的联系。当关键词用以说服搜索算法将你的应用放在搜索结果列表的前列时,应用说明同样也要去说服你的用户进行下载。不同于放置关键词的是,应用程序的完整描述应当归总为一句话。这是因为Android Market想要达到的一个效果是,让用户尽快的了解某一应用的功能和用途。如果用户在看完描述的前三行并且对之感兴趣的话,接下来会点击“查看更多”按钮去阅读你的完整说明文档或者至少再读三行。这也就是为什么你的前三行描述要尽可能的对用户具有吸引力并且激发他们对应用程序的需求。下面是一个例子:
    “The mostintuitive, usefull and simple to use File Manager on the Android Market”
    (Android Market上最直观且易用的文件管理器)
    找到诀窍了么,这一句话应该囊括“这款应用程序是什么”以及“为什么用户需要它”,这其中还包括了”文件管理器”这一关键词。当然,一些人会持不同意见,但事实却总是如此的。此外,用户为了做出选择,往往会先把应用程序安装,我会在之后的ASO系列文章中讲到有关“用户”的内容。
    接下来的几行描述同样重要因为它们可以更细致的去对应用进行描述。用户很少回去阅读最接近描述结尾的那几行,因此它们的重要性最低(如果你愿意,可以在这里放置FAQ)。
    所以有关描述部分的总结是:让它具备强可读性,保证第一句话具有很强的吸引力并且让前三行文字尽可能充分的描述你所开发的应用,并告诉人们为什么需要安装它。
    内容转载于阿布斗地主

    展开全文
  • 您只需描述一次Android应用程序,然后创建一个包含说明,APK文件,屏幕截图,应用程序图标,促销图片等的简单AppDF文件,然后将此AppDF文件上传到所有支持AppDF上传的商店。 什么是AppDF AppDF文件是扩展名为....
  • 项目是化妆品的在线商店 该网络商店使用Grails框架,Groovy编程语言和MySQL数据库作为技术。该业务不再存在,但该项目在此处作为产品展示 主要功能包括: 产品目录管理:描述,图像,技术信息和用户评论 产品库存...
  • 加快文本导入到React商务演示 ...使用管理面板发布导入的项目,它们将出现在演示商店中 变更说明 转到 选择您一直在使用的文件计划,例如。 Pants 做出改变 现在,下一次上传应该使用新的产品说明
  • 描述 Etroniques是一家虚构的在线零售商店,出售一系列Apple产品。 该项目的核心功能是能够适应各种设备屏幕尺寸。 该项目的主题是演示使用媒体查询创建响应式网站。 单击此链接以观看Etroniques的: 图书馆目录 :...
  • 一、“时妆在线”网上商店项目描述……………………………………………………………1 二、“时妆在线”网上商店经营产品与服务介绍………………………………………………1 (一)网店经营的产品结构………………...
  • 项目是一家艺术品商店网站及其内容管理系统。 我利用了HTML,CSS,JavaScript,PHP,MySQL和AJAX等技术。 由于利用了AJAX和SPA设计,用户可以立即访问所有部分,而无需刷新页面。 您可以访问index.php上的主页...
  • ==========(学校项目)该项目包括设计一个“网上商店”风格的网站(简化版) 公共部分: 用户必须能够显示给定类别的产品列表,或者通过产品名称或描述中包含的关键字搜索产品。 用户必须能够按以下方式对产品...
  • 以下描述的功能97%都没实现.... 起源: 我是做java Web方向的。记得找工作时同学们都喜欢背着笔记本、带着厚厚地简历(多半是拼凑的),像个斗士一样奔赴各个招聘会、杀向各个公司企业。项目一一部署演示给考官看,...
  • 系统主要包括以下模块:后台管理系统:管理商品,订单,类目,商品规格属性,用户管理以及内容发布等功能。...用户系统管理:管理用户的个人信息及其订单状态信息,个人商品收藏。订单系统(服务提供者):提供下单,...
  • :backhand_index_pointing_right: 商店访客可以: 浏览产品,查看描述、价值、可用性和评论 将产品添加到购物车 更改购物车中的产品数量 购物车保存在localStorage 注册用户帐户进行购买 注册收货地址,保存在...
  • Windows 应用商店应用程序中的 Hub 项目和控件一览
  • 搞到证书和描述文件后 参照 iOS创建最精简离线打包工程地址进行操作 http://ask.dcloud.net.cn/article/941 ios创建最精简离线打包工程注意事项 1 参考 注意事项 里面文件的颜色 分清是拷贝还是路径如没有交代...
  • 这是Royal Dress 商店在线目录的项目,该项目专注于婚纱的销售。 这是 Gama 学院全栈开发人员课程中进行的第一个个人项目。 积压 响应式网站 包含虚拟产品展示 包含特定产品详细信息的页面 机构页面 完全通航 能够...
  • 一、开始一个VUE项目之前 1. 开始之前先了解一下VUE相关的概念性的东西吧 Vue.js 官方文档上这样介绍:简单小巧的核心,渐进式技术栈。它提供了Web开发中常见的高级功能,如: 解耦视图与数据,可复用的组件,...
  • 商店-商店-redux-源码

    2021-02-13 23:34:18
    描述 该应用程序是一个名为“ Shop-Shop”的购物商店。 给定在React中使用ContextAPI来创建状态的入门代码,此版本将代码重构为使用Redux。 该应用程序允许用户注册,登录,然后将商品添加到他们的购物车中。 添加...
  • 商店-源码

    2021-02-26 06:14:51
    商店应用 描述 这是一个使用React Context构建并重构为Redux的电子商务网站的示例。 目录(可选) 安装 npm安装 用法 该应用程序可用作redux电子商务应用程序的入门模型。 学分 The source code for this ...
  • Google Play应用程式评分预测 请访问@ app-rating-prediction.ipynb上方的Jupyter笔记本,...使用数据分析/可视化和ML来预测应用在Google Play商店中的评级。 这是在UWaterloo数据科学俱乐部的帮助下完成的团队项目
  • 在此应用中,用户可以记录商店的日常交易。 先决条件 您需要安装应用程序什么东西。 MySQL服务器- / / 入门 在您的计算机上下载该项目。 创建一个数据库名称shop_management 然后从数据库文件夹导入sql。 运行...
  • 电子商店Capstone项目-Microverse项目 描述: 基于The Electronic Store主页的项目,它在右上角显示一个带有用户图标的导航栏,一个包含数据相关信息的主要部分和一个页脚部分。 标头(导航栏部分): - A Navbar...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,902
精华内容 6,760
关键字:

商店的项目描述