??xml version="1.0" encoding="utf-8" standalone="yes"?> 原文名:Building a Common Navigator Framework (CNF) Viewer Part III: Configuring
MenusQ作者:MICHAEL ELDERQ出处:http://scribbledideas.blogspot.com/Q本Z未能打开q,呵呵Q?/p>
先上Copyright The opinions and ideas expressed herin are my own and do not represent the
intent, opinion, or official statement of any company or organization.
在前面的文章中,我们通览了如何构件一个通用D器架构视图,以及提供了一个基扩展来展C属性文件。现在,我们要学习如何为CNF配置菜单Q以及如何ؓ我们的视图添加操作来操作我们的内宏V?/p>
概览 q边有两个基本选择来ؓCNF视图增加操作Q?/p>
•
使用org.eclipse.ui.popupMenus作ؓobjectContributions或viewerContributions来提供操作?..popupMenus扩展点能让你在整个Eclipse工作C提供操作代理。CNF视图能被配置成接受这些操作代理(~省情况下)Q或者忽略他们。在q_提供的Project
Explorer视图中,对象或视图操作是被接受的Q在W四部分中会详细介绍Q?/p>
•
使用org.eclipse.ui.navigator.navigatorContent作ؓactionProviders来提供操作。有时候,客户需要更加有计划的控制下面这些内容:对于特定上下文环境中l定的菜单,要提供怎样的操作;Z当前的选择,需要提供什么可重定向操作?/p>
CNF的操作提供者,只被CNF视图所接受。(在W五部分l出详细信息Q?/p>
配置菜单l构 在第一部分Q我们定义了CZ<viewer />元素Q弹单被要的提到了?/p>
回忆一下,q里有两U方法来配置弹出菜单。第一U可能就是简单的为org.eclipse.ui.navigator.viewer?lt;viewer
/>元素下的popupMenuId指定一个|W二U可能就是采取一U更d的方法来配置菜单支持的插入点?/p>
提示QpopupMenuId和popupMenu元素同时被指定将D错误?/p>
如果我们惌讄popupMenuIdQ将如同下面看到的一P
该标识符能被org.eclipse.ui.popupMenus的扩展者所使用Q来囑֢加一个特定的viewerContributionsQ然而objectContributions不需要Q何的标识W?/p>
当只有popupMenuId属性被指定Q缺省的插入点(insertion
pointsQ集合会自动的配|到弹出菜单中。在org.eclipse.ui.navigator.viewer的schema参考中Q列Z~省配置。ؓ方便赯Q这里也列出了: "group.new" separator="true" q些D被org.eclipse.ui.popupMenus中的menubarPath属性元素所使用?/p>
当有计划的用和搜烦菜单ҎQ这些g能被使用Q参考org.eclipse.jface.action.IContributionManagerQ特别是insertAfter(),insertBefore(),
和appendToGroup()Q?/p>
所有字W常?"group.*")都没定义在org.eclipse.ui.navigator.ICommonMenuConstants中,以便有计划的使用?/p>
作ؓ替换Q我们可以选择定义<viewer/>的子元素<popupMenu
/>Q这里我们可以定义自q插入点(insertion pointsQ。(译者注Q略q一个基本操作)?/p>
在我们的例子中,我们可以使用同Project Explorer一L菜单配置?/p>
每个<insertionPoint />元素暗示q一个GroupMarker能通过IContributionMenu
API被访问到。当separator属性被讄成trueӞ菜单会展现一条水q线。Eclipse中的菜单有够的Q只昄必要的线Q两条背靠背的线只被显C成一条?/p>
让我们注意一?lt;popupMenu
/>下的allowsPlatformContributions="true"属性。缺省情况下QCNF接受..popupMenus提供的操作。若把该属性设|成falseQ将会限制菜单只接受操作提供者(Action
ProvidersQ?/p>
上面的例子ƈ没有做什么神奇的事,在你自己的CNF视图中,你可以根据需要定义自q插入?"group.example")。推荐的命名规约?group.*"Q除了additions
group之外Q上面的那些group都遵循了?/p>
对于扩展或操作CNF菜单插入炚w合的一些评论。对于一个已l配|好的视图,是没有可能来声明性操作或扩展他的插入炚w合的。有可能的是Q通过Action
ProvidersQ来增加新的GroupMarkers
或SeparatorsQ但q里需要当心。在W五部分Q我们将详细介绍q个是如何完成的Q现在只是提醒一下,需要当心,q且当只有需要用?lt;actionProvider
/>中dependsOn属性时。该dependsOn的值指明ؓ菜单提供额外插入炚w合的Action
Provider的标识符。永q不要programmaticallyQ译者注Q不知道该怎么)删除插入点,因ؓ其它扩展可能会依赖与他们。如果你自己定义的视图不需要用某个插入点Q则在定义你自己?lt;popupMenu
/>元素Ӟ不要定义他就好了?/p>
ȝ 在这文章中Q我们讨Z如何为CNF视图配置菜单Q下面的文章讨论如何用org.eclipse.ui.popupMenus
和org.eclipse.ui.navigator.navigatorContent/actionProvider来增加菜单?/p>
由windy444译Q{载请注明 原文名:Building a Common Navigator Framework (CNF) Viewer Part II: Adding
ContentQ作者:MICHAEL ELDERQ出处:http://scribbledideas.blogspot.com/Q本Z未能打开q,呵呵Q?/p>
先上Copyright The opinions and ideas expressed herin are my own and do not represent the
intent, opinion, or official statement of any company or organization.
在这文章中Q我们将学习如何为我们上文章定义的例子增加一个简单的内容扩展。ؓ避免陷于q度复杂的内容和标签提供者,我们关注于一个简单的文gl构模型Q简单文本文?.properties。当完成Ӟ我们的内Ҏ展将允许在Example
viewer展开L*.properties文gQƈ在下面正排列出数据?/p>
首先Q让我们看一下,内容扩展在plugin.xml中看h是怎样的。(译者注Q略q一些基本操作,plugin.xml如下Q) 该扩展用id
"org.eclipse.ui.examples.navigator.propertiesContent"定义了一个内Ҏ展,昄的名U是"Properties
File Contents"。该名称会出现在qo器对话框?Available
Extensions"标签中。我们马上会ȝ一下内容和标签提供者的Java代码Q但现在只是注意一下,两者都被指定了。只指定其中的一个是不行的?/p>
最后,我们讄一些属性,告诉框架Q我们需要怎样的扩展: • activeByDefault 军_扩展是否在缺省配|中被激z(如:新工作空_ • icon 军_在用L面引用该扩展Ӟ昄什么图?/p>
• priority
有几U不同的用法。最主要的作用是指定视图中项的相对位|(视图中从上到下排列的分别是最高优先Qhighest priorityQ项到最低优先Qlowest
priorityQ项Q。一般的_“一般”Q?normal"Q或“高”Q?high"Q对于大多数的扩展来__了,两者分别预C着与资源扩展合在一P优先U一L话,则按字母序Q或恰好攑֜工程下的资源之上?/p>
在每?lt;navigatorContent
/>元素内,我们能指定不同类别的扩展。但在扩展我们的例子之前Q我们必d架构定义Q我们的扩展何时被调用。我们必d义,什么时候视图中树的节点能够提供childrenQparentsQ或者标{֒图标。我们用Eclipse
核心表达式来做这个工作?/p>
对于内容扩展Q这里有两个重要的表辑ּQ?lt;triggerPoints />
?lt;possibleChildren />?/p>
<triggerPoints />表达式指定树中哪U类型的节点Ҏ们的扩展感兴。当架构扑ֈ了匹?lt;triggerPoints
/>的节点,我们的扩展会被调用,节点提供子元素。我们的扩展q不一定是唯一能有Z节点提供子元素的扩展Q架构会聚集该节点下所有的子元素(译者注Q可以是不同扩展提供的)?/p>
<possibleChildren
/>表达式指定我们的扩展能ؓ树中哪种cd的节Ҏ供标{或父节点(译者注Q注意与triggerPoints 的不同)。若你的场景中必d视图中支持link
with editor, 或?setSelection()Q?lt;possibleChildren />表达式必L完整且正的?/p>
一旦我们定义了一个扩展,我们必须把它l定到想要关联的视图上。设定一?lt;viewerContentBinding
/>Q来指定M匚winclude中模式的扩展Q这些扩展对于在<viewerContentBinding
/>元素中指定的MviewerId的视图是可见的。可以参考上一文章?/p>
既然我们已经讄好了扩展Q现在可以来看一下真正处理事务的代码了?/p>
首先Q我们需要一个模型。一个属性文件的l构是相当简单的Q我们只要用一个模型对象PropertiesTreeData,p够徏模了。这个对象有三个域:nameQ属性的名称Q,valueQ属性的|QcontainerQ拥有属性模型的文gQ。每一个模型元素,指示属性文件中的一条属性?/p>
在我们的例子中,模型只有当被内容提供者请求时Q才被蝲入。内Ҏ供者被框架用来军_树中每个元素的子元素Q或者被用来指定l定元素的父元素Q可能有多个Q?/p>
我们的示例内Ҏ供者实C接口org.eclipse.jface.viewers.ITreeContentProviderQ用来提供树形结构的信息。通用D器架构也支持实现org.eclipse.jface.viewers.ITreePathContentProvider接口的内Ҏ供者,但这个超Z本例的范围?/p>
PropertiesContentProvider也提供了我们的扩展需要的其它一些功能,比如监听资源变化和更新模型(以及视图Q。在本文中不会涉及,读者可以到本文的源码中了解q个是如何工作的?/p>
现在Q我们将xITreeContentProvider提供的视N成方法?/p>
ITreeContentProvider必须实现getElements(Object
input),getChildren(Object parent), hasChildren(Object element) ?
getParent(Object element)Ҏ?/p>
getElements()Ҏ被用来查询在视图根目录下有哪些元素。许多实C直接调用getChildren()来处理,我们在这边也如此?/p>
getChildren()Ҏ接受一个对象(我们q里?.propertiesl尾的IFileQ或者是׃?lt;triggerPoints
/>中描q而必d入的PropertiesTreeData模型实例Q?/p>
在接下来的实CQ我们检查接受的对象是否为org.eclipse.core.resources.IFileQƈ且是否以*.propertiesl尾。如果接受的对象满q些要求Q我们检查蝲入模型的~存Q当未缓存时Q尝试蝲入模型。updateModel()Ҏؓ每个属性创Z个PropertiesTreeData对象Qƈ且在cachedModelMap中缓存所扑ֈ的模型。请读者在源码中查看updateModel()Ҏ是如何实现的?/p>
hasChildren()Ҏ被优化了Q知道当传入的对象是?.propertiesl尾的IFileQ就q回true。另一U替换的ҎQ是在这边蝲入文Ӟ作一些计,但这h能会受损?/p>
如果传入的对象是PropertiesTreeData模型元素Q则q回false。因为我们的模型元素没有子元素。(属性没有子元素Q但其它模型可能׃有了Q?/p>
getParent()Ҏq回包含PropertiesTreeData的IFileQ若传入其它参数Q返回null。通用D器架构会l箋询问其它扩展Q直C个非null的的父元素被扑ֈ或者已l遍历了所有扩展。回忆一下,如果元素匚w<possibleChildren
/>表达式,扩展会被要求元素提供父节炏V?/p>
最后,我们内容扩展的标{提供者,会告诉视囑֦何ؓ我们的模型元素(PropertiesTreeDataQ来展现标签和图标。既然我们只xq些元素Q我们不必担心如何ؓ其它元素来提供标{֒图标。这些元素将由其它的扩展来展现标{֒图标?/p>
PropertiesLabelProvider实现了org.eclipse.jface.viewers.ILabelProvider
?br />
org.eclipse.ui.navigator.IDescriptionProvider接口?/p>
ILabelProvider是JFace中提供标{֒图标的缺省接口要求?/p>
IDescriptionProvider是特定用于通用D器架构的Q用于在EclipseH口左下角的状态栏昄文本?/p>
ILabelProvider要求的方法是getText() ?getImage()。我们将让模型标{显C?name=
value"的字W串。对于图标,我们使用q_提供的一个共享图标?/p>
标签提供者在下面两种情况下会被访问到Q?.自己的扩展定义的元素?.所有匹?lt;possibleChildren
/>的元素。如果图标或标签q回了nullQ框架会Z<possibleChildren
/>和视图bindingsQl查扑օ它扩展(来显C标{֒图标Q。如果你的扩展希望由其它人来定义标签和图标,则要q回null?/p>
p些了Q最l的视图Example View在属性文件下列出了属性?/p>
由windy444译Q{载请注明 原文名:Building a Common Navigator Framework (CNF) Viewer Part I: Defining the
View Part Q作者:MICHAEL ELDERQ出处:http://scribbledideas.blogspot.com/Q本Z未能打开q,呵呵Q?/p>
先上Copyright The opinions and ideas expressed herin are my own and do not represent the
intent, opinion, or official statement of any company or organization. 关于扩展点和API的特定文档,可以在Eclipse的^台帮助((Help > Help ContentQ中扑ֈQPlatform
Plug-in Developer's Guide >Reference > API Reference | Extension Points
ReferenceQ涉及的扩展Ҏorg.eclipse.ui.navigator.viewerQorg.eclipse.ui.navigator.navigatorContent。相关的API包ؓorg.eclipse.ui.navigator。若你想知道q篇文章中提到的东西的更多细节,q些东西可以作ؓ参考?/p>
好了Q哪里开始呢Q首先,我们对包含该视囄插g作一些配|,把org.eclipse.ui.navigatordC赖(dependenciesQ中。然后,我们用org.eclipse.ui.views扩展Ҏ定义一个view
partQƈ把org.eclipse.ui.navigator.CommonNavigatorcM为view
part的实现类。这个类ؓ我们的视图提供一些基功能。然后,我们定义org.eclipse.ui.navigator.viewer扩展点,把视N|成通用D器(Common
NavigatorQ。最后,能够通过定义org.eclipse.ui.navigator.navigatorContent扩展点以及绑?org.eclipse.ui.navigator.viewer/viewerContentBinding)来关联扩展点和视图?/p>
你不仅可以通过org.eclipse.ui.navigator.CommonNavigatorQ把该架构用于导航器Q你可以通过org.eclipse.ui.navigator.INavigatorContentService把该架构用于从对话框到编辑器的Q何地方,或者定义你自己的视囑֒view
part。但在这里,我们只x于基本功能?/p>
基本讄 通用D器架构是Eclipse 3.2的一个新Ҏ,因此Q你臛_需要安装Eclipse
3.2。(译者注Q下面一些是开发过插g的h都知道的事情Q此处略q) 定义View Part 当要定义一个具有通用D器功能的视图Q你必须定义一个实际的view partQ这个是你视囄容器?/p>
Q译者注Q略MD|关紧要的Q插件开发初学者可以去参考基本view的开发,定义完成后的plugin文g如下Q) 定义视图配置 一旦定义好了view
partQ我们将通过org.eclipse.ui.navigator.viewerҎ们的视图作一些配|扩展,q些扩展告诉架构一些基的东西,例如Q通用D器的view
part是哪个,弹出菜单的结构是怎样的,是否要定义object contributionsQ以及一些会影响视图~省行ؓ的属性?/p>
Q译者注Q略q定义plugin.xml文gq程Q后面会附上该文Ӟ
对于弹出菜单的一些评?/strong>。通用D器架构提供两U方式让视图来定制菜单。第一U方式是通过指定org.eclipse.ui.navigator.viewer扩展点下viewer的popupMenuIdQ来接受~省的分隔符Q以及菜单的group
mark id。缺省D记录在org.eclipse.ui.navigator.viewer扩展点下Qؓ了方便,被列在了下面?/p>
"group.new" separator="true" 另一U方式,你可以选择不去指定popupMenuIdQ作为替换,你可以指?lt;popupmenu />作ؓ<viewer
/>元素的子元素。在q里Q你可以定义自己的分隔符以及group mark idQ能够由后面的用h增加菜单Q。如果你期望l定q_(Resource,
Javatm)提供内容扩展的内容(contentQ或者操作(ActionQ,推荐您用缺省分l(上面列出的)?/p>
对于选项QoptionQ的一些评?/strong>?lt;viewer />元素下的< options
/>元素能够允许指定Z字符串的name=value寏V这里有一些选项被基架构所使用Q在org.eclipse.ui.navigator.viewer扩展Ҏ档的例子部分有记录)Q但你自q视图或扩展点也可以用这U机制来提供额外的扩展。请参考org.eclipse.ui.navigator.INavigatorViewerDescriptor中读?lt;viewer
/>元素中属性的API。你能通过通用D器视囄org.eclipse.ui.navigator.INavigatorContentService得到视图描述W?/p>
定义viewerId后的plugin文gQ?/p>
定义好视囑Q我们需要添加内Ҏ展,q绑定到视图上。我在下一文章中l出一些更具体的信息。作为示例,我们单的把缺省的资源内容Q由org.eclipse.ui.navigator.resources插g定义Q绑定到视图上?/p>
Q译者注Q略q一些基本操作,定义完后的plugin文g如下Q) 你现在可以启动工作台了(Run... > New Eclipse
ApplicationQ,q时能看到我们的视图。但我们q未l视囄定操作,所以,你仍然要通过在资源导航器或包览器中创徏工程Q才能在我们的视图中出现工程。后面,我们会增加资源操作和qo器,但现在,让我们看看该视图拥有的缺省行为。目前有折叠所有按钮(Collapse
AllQ,Link with Editor按钮Q过滤器QFiltersQ按钮(以及一?Available
Filters"标签Q,和一个扩展标{("Available Content"Q?/p>
要绑定资源过滤器Q我们需要在</includes>元素下增加另一个contentExtension元素Q指?org.eclipse.ui.navigator.resources.filters.*"为标识符。这会选取org.eclipse.ui.navigator.resources定义的所有的qo器。当Ӟ你可以参考org.eclipse.ui.navigator.resources的plugin文gQ选取你自己想要的qo器的标示W?/p>
再一ơ选择Run...Q确认在qo器对话框中出C一些资源过滤器?/p>
接下来,我们绑定默认的资源操作。要l定操作Q需要在我们扩展点的根下面,增加一个viewerActionBinding元素。(译者注Q略q一些操作,定义完后的plugin文g如下Q) 现在Q启动工作台后,在默认的I图中Q在视图中右键空的地方)Q你看到New, Import, Export, ?
Refresh操作。当你选中视图中的一个元素时Q出现的菜单cM与资源导航器中的?/p>
Q译者注Q再ơ略q一D|作,不媄响对文章的理解) 定义qo?/font> 今天我们做的最后一件事Q是用Eclipse核心表达式(Core
ExpressionsQؓ我们的视囑֮义一个过滤器。核心表辑ּ架构的文档在org.eclipse.core.expressions插g中。我们将用org.eclipse.core.resources定义的属性测试者(property
testersQ来试特定的工E性质QNatureQ,然后隐藏所有没有该性质的工E?/p>
Q译者注Q略q一些操作,定义完后的plugin文g如下Q) 你也可以在扩展点中设|activeByDefault属性,来决定该qo器是否在~省配置中被ȀzR?/p>
最后,我们需要ؓ我们的视囑֮义contentExtensionQ来作ؓviewerContentBinding的一部分。确保用了我们新徏的过滤器的idQ或者一个通用的样式(如:"org.eclipse.ui.examples.navigator.filters.*"Q来l定所有我们未来定义的匚w样式的过滤器。最后的plug.xml如下Q?/p>
现在Q最后一ơ启动工作台。创Z个新的简单工E和Java工程Q当“Hide non-Java
Projects”被激zLQ简单工E会被隐藏?/p>
Q译者注Q第一部分l于译完了Q?/p>
由windy444译Q{载请注明
All
postings by me to this site are copyrighted (C) by Michael D. Elder, 2006 and
made available under the terms of the Eclipse Public License 1.0 with the
constraint that any reuse of the content must contain this copyright
statement.
"group.goto"
"group.open"
separator="true"
"group.openWith"
"group.edit"
separator="true"
"group.show"
separator="true"
"group.reorganize"
"group.port"
"group.generate"
separator="true"
"group.search" separator="true"
"group.build"
separator="true"
"additions" separator="true"
"group.properties"
separator="true"
All
postings by me to this site are copyrighted (C) by Michael D. Elder, 2006 and
made available under the terms of the Eclipse Public License 1.0 with the
constraint that any reuse of the content must contain this copyright
statement.
]]>
All
postings by me to this site are copyrighted (C) by Michael D. Elder, 2006 and
made available under the terms of the Eclipse Public License 1.0 with the
constraint that any reuse of the content must contain this copyright
statement.
"group.goto"
"group.open"
separator="true"
"group.openWith"
"group.edit"
separator="true"
"group.show"
separator="true"
"group.reorganize"
"group.port"
"group.generate"
separator="true"
"group.search" separator="true"
"group.build"
separator="true"
"additions" separator="true"
"group.properties"
separator="true"
1、酸性体液致病的原因:
D酶促反应效率下降?
D血液粘度上升,动性下降?
Dl菌和真菌在体内q度z跃?
D免疫pȝ的反应速度和敏感度下降?
会改变血U细胞的物理Ҏ,影响血液微循环的效率?
会引发各U体l胞为适应酸性体液环境而生的不利H变?
2、酸性体质的主要病症表现Q?
酸性体质者极易疲功?
酸性体液严重媄响儿童智力?
酸性体液易D多种体内l石?
酸性体液易引发多种肿瘤和癌症?
酸性体液易D动脉化、高血压?
酸性体液易D多种q敏症、易感冒?
酸性体液易Dp代谢疾病、痴肥、口臭?
酸性体液易D各种兌痛症q会加重通风病情?
酸性体液加重钙失Q妨钙吸收Q导致骨质疏杄?
酸性体液导致出生儿童性别比例pQ酸性体质易生女孩?
酸性体液导致肌肉皮肤松弛、易出现q、易出现皮肤感染、导致治愈速度慢、易留疤
痕?
3 、h体体液酸^衡理?
Z体液酸碱q是h体的三大基础q之一?
占h体体?70 Q的体液有一定的酸碱度,q在较窄的范围内保持E_Q这U酸^?br />
是维持h体生命活动的重要基础。如果这一q被破坏,׃影响生命的正常活动效
率,q导致各U疾病。h从一诞生开始了她一生顽强的抗酸斗争Q这是Z体液?br />
^衡理论的核心内容?
随着人类C会文明的发展,Z发现来多新的严重疄在不断出玎ͼ包括各种q?br />
敏、肿瘤、癌症、心血疾病、糖病{等Q这些疾病的共同特征是它们与Z外部?br />
l菌、病毒无养I而是因ؓZ内部自n生理的失调或功能的下降所致。这些疾?br />
无法*杀菌、消炎(除因问题D体内q微生物的大量J殖外)来进行治疗,因ؓ
q些疄的根源来自h体体液变酸。用世界著名d博士、日本专家莜原秀隆的一句话
ԌZ体液的酸化是癄之源?
不论Z的吸收和代谢多么复杂Q但有一Ҏ很清楚的Q那是Z的代谢过E是产生
酸性物质的q程Qh体所有活动都依赖生命的基本单?#8220;l胞”体内营ȝQ经氧化
分解获得能量Q同旉攑և各种酸性代谢废物,无一例外。最基本的化学常识告诉我
们,一个碱性的体液环境有利于中和、清除体内的酸性代谢物Q是氧化分解q程得以?br />
利l,生命可以q箋不断的获得所需能量Q事实十分清楚的告诉我们Q就减少酸性代
谢物在被排出Z之前对细胞活动的影响而言Q一个碱性的体液环境l对比酸性体液环
境有优势得多Q所以弱性得体液环境h十分重要得生理意义。各Uh体体液的向
酸化是h体衰老过E( Aging Process Q的重要指标。通过定体液的酸度可以判断
一个hl胞的生理年龄。而大量的正常l胞为适应不断酸化的体液环境,在其M之前
有Z获得为适应酸性环境的有效H变从而ɾl胞癌变。这一机理解释?100 Q的?br />
症患者是酸性体质的事实。因此,调整和恢复体液应有的酸碱水^会减细胞癌变的?br />
会,它被誉ؓ除外U切除和攑ְ、药物疗法外的第三种防治癌肿的途径?
所以,q性的体液环境是细胞活动的最佳也是最基本的机体环境,它得生命整体可
以合理地延箋?
Z体液中,所有的基础体液都处于弱性, PH 值都大于 7.0 。血液的 PH gؓ
7.35-7.45 Q而大多数分泌液也处于q性水qI如果h体所有的体液混合在一P
其^?PH gؓ 7.30-7.35 。hc赖以繁衍后代的_液和宫颈液?PH 值更高达 7.5-
9.0 ?
我们无法改变体液酸化的大势Q-即h体一定会M的规律,但是Q我们完全可以g
~h体体液酸化的q程Q从而达到gq益寿的目的?
此理够科学、有效和合理地解释了q?20 q全球泛滥的内源性疾病(非体外病菌入
侉|产生的疾病:如心脑血疾病、结矟뀁关节炎?痛风、过敏、癌肿等Q的产生?br />
理,q依据此理论扑ֈ了防d源性疾病的有效Ҏ?
4 ?Z酸性体质是D各种癌肿和早衰的主要原因Q?
酸性体质得正常细胞ؓ适应酸性环境而导致细胞过早衰退或生变异。事实表明,?br />
有糖病、心血疾病、各cȝ症等中老年才有的疾病越来越q轻化,正是因ؓ酸性体
质h越来越q轻化。而调整体液酸^衡被誉ؓ预防和治疗癌肿的W三U有效方法?
六大原因造成Cn体酸性化
1.饮食l构不合理 专家指出Q科学的饮食习惯是酸食物比例ؓ20%Q?0%Q但是现?br />
人饮食中的主食往往是精c白面、鸡鸭鱼肉蛋Q而这些都是酸性食物,据分析这L?br />
食习惯其酸碱比例却正好相反,?0%:20%。因此,长期摄入q多的酸性食物是DZ
酸性化的原因之一?
2.q动不 在阳光下多做q动多出汗,可帮助排除体内多余的酸性物质。但CZ
车代步现象愈来愈多,q动量大大减,长久便会D酸性代谢物长期滞留在体内,?br />
致体质的酸性化?
3.q重的心理负担 ׃C生活节奏的加快,Z在日常生zR工作和感情上承担着
不同的压力。当q种压力得不到释攄时候,便会对n体造成影响Q从而导致体质的?br />
性化?
4.不良嗜好 烟、酒{都是典型的酸性食品,毫无节制的抽烟饮酒等Q极易导致h体的
酸性化?
5.生活不规律 如彻夜唱卡拉OK、打d、夜不归宿等无规律生z,都会加重体质?br />
化?
6.环境的严重污染 ׃饮用水、农作物、家鱼蛋等造成严重污染Qh们摄入这些含
有有宛_素的饮水、食物和吸入有害I气后,其中的酸性物质会滞留在体内造成体质?br />
性化?
哪些人的w体Ҏ“发酸”
1.熬夜一?晚上1Q?0以后不睡觉,Z的代谢作用由内分泌燃烧,用内分泌燃烧产生
的毒素会很多Q会使体质变酸,通常熬夜的h得慢性疾病的机率比抽烟或喝酒的h都来
得高。所以每天尽量在晚上12Q?0以前睡觉Q不要常熬夜Q若非要熬夜Q一星期以一?br />
为限Q熬夜时不要吃肉Q尽量吃x化合物,q样隔天才不至于很篏Q可把伤宛_x
低?
2.宵夜一?
凡是晚上8Q?0再进食就U做宵夜。吃宵夜隔天会疲倦,爬不起床Q肝也会受损Q因为睡
觉时Qh体各器官zd力低Q处于休息状态,因此食物留在肠子里会变酸、发c?br />
毒素伤害w体?
3.早餐?#8220;逃兵”
一天三中Q早最重要Q但许多人普遍不吃早,一早空着肚子Q体内没有动力,?br />
自动使用甲状腺、副甲状腺、下脑垂体等ZQ去燃烧l织Q造成Z亢进、体质变
酸,长期D慢性病?
4.“_N”一?
运动且整天坐在办公室的上班族最Ҏ犯这U错误,因ؓ吃的,L选择很精致的
食物而少吃粗_,q种人的肠子老化的特别快Q肝功能差,大便是黑色的而且会常?br />
U。因为精致食物缺乏纤l素Q会D肠子功能变差Q甚臌~,你所吃的食物变成?br />
毒素Q你体质变酸,慢性病也开始了?
测你的体质是否“发酸”?
1.早v_不佳Q?
2.夜里睡不?q)Q?
3.整天都感到很累;
4.工作想速战速决Q没有持久力Q?
5.情A不稳定,Ҏ发怒;
6.易被虫咬Q?
7.Ҏ得皮肤病Q?
8.Ҏ发烧或感冒;
9.有高血压、低血压、肝脏病Q?
10.有糖病、肾脏病、痛风;
11.l常头疼、腿痛、肩酸、腰酸;
12.w体肥胖Q?
13.有胃病、胃溃疡Q?
14.有过敏症、便U;
15.有哮喘病、失眠症、神l衰弱;
16.食欲不振Q?
17.牙龈易出血Q?
18.伤口易化;
19.喜欢?酸)饮料Q?
20.喜欢吃肉食、a腻食物;
21.喜欢喝酒Q?
22.喜欢吃甜食;
23.喜欢吸烟?
有h_当你25岁时Qn体血液就已开始酸化,如果你到?0岁,已出C上述??
U情况,?
你的酸性体质已C相当的程度,怎么办?快采取措施减酸?
常见食物的酸?
强酸?
蛋黄、^酪、白p、西炏V乌鱼子、柴鱹{牛奶、可乐类饮料{?
中酸?
火腿、鸡肉、鸭肉、鲔鱹{虾、猪肉、鳗鱹{牛肉、白面包、奶沏V羊肉等?
弱酸?
白米、白面、花生、啤酒、酒、a炸豆腐、v苔、文蛤、章鱹{惔鳅?
中?p米、玉c뀁小c뀁大麦等_粮
q?
U豆、萝卜、苹果、甘蓝菜、洋葱、豆腐等?
中碱?
萝卜qӀ大豆、红萝卜、蕃茄、香蕉、橘子、番瓜、草莓、蛋白、梅qӀ柠檬、菠
菜等?
强碱?
葡萄、茶叶、葡萄酒、v带芽、v带等。尤其是天然l藻富含叶绿素,是不错的?br />
性健康食品?
]]>
l于不加班了Q做歌纪c?br />
七一喜鹊刎ͼ
朝鸣杨柳梢;
有歌和婉调,
q眉也弯腰?/p>
]]>
偷把我的爱车偷CQ那可是跟了我两q的宝马啊~
]]>
雨过陌上独踱Q不见虹之颜艌Ӏ?br /> 归来床前数点Q零落月光之宴?/p>
——雨后坝上寻虹不见而归有感?/p>
Extension Object同Visitor、Decorator{模式差不多Q都是在不改变类层次机构的前提下向系l添加功能,被称为扩展对象模式?/p>
在了解扩展对象模式之前需要了解一下相关的一条OOD原则Q就是单一职责原则QSingle Responsibility PrincipleQSRPQ?/p>
׃个类而言Q应该仅有一个引起他变化的原因?/p>
大致的意思就是要把职责分配到不同的对象当中去。如果我们把每一个职责的变化看成是变化的一个uU,当需求变化时Q该变化会反映ؓcȝ职责的变化? 如果一个类承担了多余一个的职责Q那么引起他变化的原因就多余一个uU,也就是把q些职责耦合C一赗在某种E度上,q种耦合会导致Fragile DesignQ当变化发生Ӟ设计会遭受到意向不到的破坏?/p>
在具体讨Z前,先来看一个设计问题?br />
我们要开始设计一个RSS ReaderQ一般用一|来呈现对于Feed的管理和l织l构Q类gBloglines、GreatNews那样的。构|的过E中Q我们可以用Composite模式来设计相应的cdơ结构,例如Q基本接口我们可以采?
public interface IChannelNode {
public String getTitle();
public String getId();
... ...
}
然后构徏Composite的子c(用来容纳目录{组l结构)和具体类Q例?/p>
public class CompositeChannelNode implements IChannelNode {
public void addChild(IChannelNode node);
... ...
}
public class FeedChannelNode implements IChannelNode {
... ...
}
上述q些cȝ构完全可以用来描q这|的层ơ结构了Q而且我们可以使用Eclipse中的TreeViewer来显C。Eclipse中的 TreeViewer是基于Structured Model的,所以,几乎使用很少的代码,可以完成显C个树的功能,q也是Eclipse对于q种ZStructured Model装的比较好的结果。不q简单的使用UI会比较单调,所以,需要对于UI部分q行润色Q那么在q个cdơ中不可避免的要加入UI部分的代码, q就不符合SRP的要求了。另外,假如我们q要完成对于q棵树的persistentQ那么序列化的代码又会污染这个单U的模型了。这里我们就可以使用? 展对象模式了Q把q些变化另外wraph?/p>
q个是Uncle Bob提过的一U优雅的实现机制Q是Z对于Extension的抽象封装,然后在本w模型(上面的Channell织模型Q注册这? ExtensionQ在q行时可以方便的得到合适的扩展来执行相应功能。例如我们来定义一个Extension的注册和使用机制Q然后在 IChannelNode中将hdelegatel这套机Ӟ当然也可以把q个直接集成到IChannelNode的代码中Q下面用Part? PartExtension来完成这部分功能Q代码不是完整的Q?/p>
public abstract class Part {
public void addExtension(String extensionType, PartExtension extension) { ... ... }
public PartExtension getExtension(String extensionType) { ... ... }
}
public interface PartExtension {
}
可以单的使用一个HashMap来完成extension的注册和获取。其实这部分的代码就把扩展这部分不变的内容封装v来,而对于可能存在的? 化完全可以利用增加新的类来完成,也就满了开攑ְ闭原则(OCPQ。比如我们说到的persistent部分Q徏立相应的persistent扩展可 以了?/p>
public class PersistentPart extends Part {
public PersistentPart() {
addExtension("CSVFormat", new CSVPersistentPartExtension());
// 注册其他format的存储方?br />
}
}
public interface PersistentExtension extends PartExtension {
public void doPersistent(IChannelNode node);
}
public class CSVPersistentPartExtension implements PersistentExtension {
public void doPersistent(IChannelNode node) {
// save node.getTitle();
// save node.getId();
......
}
}
变化的部分就是用什么方式来存储信息了,比如我们不用CVS来存储而改用XML存储Q那么只需要生成相应的XMLPersistentPartExtensionQƈ把他注册到PersistentPart可以了?br /> 看了q个Q当时我觉得搞得真是很麻烦,很复杂,而且可读性很差啊Q呵c不q本wExtension Object的实现就是特别复杂的Q慢慢实践,我想会越来越掌握q种Ҏ的?/p>
我投入精力更大的是下面要说的一U同Adapterl合h的扩展方法,q用这U方法实CUI部分的分,感觉实方便很多Q不q开始理解v来也是比较头疹{?/p>
q里要说的是Eclipseq_底层最为核心的IAdaptableQErich Gamma一手打造,我先后看了好久才体会到这U设计的力。这ơ扩展我们拿UI来说事。Eclipse中显CZ个Tree很容易,有了 Structured Model之后Q打造好相应的TreeContentProvider和LabelContentProvider基本完成了。但是对于一个效果复杂的 昄在Provider中的代码׃昄很臃肿,主要也是在LabelContentProvider中,而原有模型的逻辑也会增加很多ZUI部分的代 码,比如Channel不同状态下要显CZ么样的图片,使用什么样的字体,什么样的前景背景色{等。所以,比较好的办法是分离Z套ƈ行的cdơ, IChannelNodeUIQ而且如果在扩展过E中我们能够把IChannelNode适配到IChannelNodeUIQƈ交给 LabelContentProvider好办了Q所有的UI代码搞到IChannelNodeUIq套东西里面M?br /> 现在介绍的扩展方式就是依据Adapter为基的,所以,现在先把Adapterq部分搞?/p>
public interface IChannelNodeUI {
public Image getImage();
public Font getFont();
... ...
}
public class ChannelNodeUIAdapter implements IChannelNodeUI {
private IChannelNode node_;
public ChannelNodeUIAdapter(IChannelNode node) { ... ... }
public Image getImage() {
if (node_.isLoading())
// return loading image;
... ...
}
......
}
接下来也是对这些扩展的理Q比如我们还有对于IPersistent的适配Q那么如何更好的来管理这些扩展呢。比较容易想到的q是注册然后获取q样的方法,可是q些适配器和适配关系如何理呢?
看一下,Erich大牛的IAdaptable
org.eclipse.core.runtime/IAdaptable
public interface IAdaptable {
public Object getAdapter(Class adapter);
}
如果IChannelNode从IAdaptablel承q来Q那么我们就可以在LabelContentProvider中这样写刎ͼ都没有进行check啊)Q?/p>
public Image getImage(Object element) {
IChannelNode node = (IChannelNode)element;
IChannelNodeUI uiNode = (IChannelNodeUI)node.getAdapter(IChannelNodeUI.class);
return uiNode.getImage();
}
那么需要我们对于IChannelNode中的getAdapter来实玎ͼ比如我们在ChannelNode中:
public Object getAdapter(Class adapter) {
if(adapter == IChannelNodeUI.class)
return new ChannelNodeUIAdapter(this);
return null;
}
q样的问题就是不好维护,所以,Erich大牛q提供了对应的IAdapterFactory和IAdapterManagerQ当然AdapterManager是Platform中提供的对于框架部分的封装,不需要我们干什么了?br /> 我们也就需要生成一个AdapterFactoryQ然后把他注册给Platform的AdapterManager可以了Q?/p>
IAdapterManager manager = Platform.getAdapterManager();
IAdapterFactory uiFactory = new ChannelNodeUIFactory();
manager.registerAdapters(uiFactory, IChannelNode.class);
那么如何使用呢,Eclipse的Platform里提供了一个PlatformObject的类Q承他直接具有了Adaptable的能力, q自动把getAdapter的请求{交给Platform了,~陷是会媄响你的承体p,毕竟Java无法多元l承Q所以,如果你不是承自 PlatformObject的话Q自p{交一下,
Platform.getAdapterManager().getAdapter(this, IChannelNodeUI.class);
q种扩展对象模式是Zq样的Adapter模式Q由IAdaptable、IAdapterFactory和IAdapterManager完成了对框架的封装,从而给Eclipse带来了巨大的灉|性?/p>
参考数目:《敏捯Y件开发》、《Contributing to Eclipse?/p>