<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[深入浅出制作全自动Mud机器人-选项模式]]></title><description><![CDATA[<p dir="auto">选项(Option)模式是一种新近流行的设计模式，用于配置类，主要流行于于Go语言(golang)。</p>
<p dir="auto">每个设计模式本质上就是正对一个场景的一个常见小招式。</p>
<p dir="auto">选项模式也不例外。它解决的主要问题是：</p>
<p dir="auto">复杂系统的可复用编码配置。</p>
<p dir="auto">典型的选项模式的形式是</p>
<pre><code class="language-golang"> var system=Systm.New(opt1,opt2,opt3...)
</code></pre>
<p dir="auto">通过opt1,opt2,opt3来对系统进行初始化。</p>
<h2>复杂系统</h2>
<p dir="auto">选项模式正常情况下一定是解决复杂系统的问题的。</p>
<p dir="auto">甚至可以简单粗暴的认为选项模式是一个改良的构建者(builder)模式，即配置器列表。</p>
<p dir="auto">不复杂的系统没有使用选项模式的必要。</p>
<p dir="auto">对于选项模式，最典型的就是和Builder模式一样，用来处理一个封装类，类里封装了大量的函数/接口，可以根据需要去把这些函数进行替换。</p>
<h2>默认可用及扩展性</h2>
<p dir="auto">选项模式的优势其实很大一部分体现在可扩展性上。</p>
<p dir="auto">由于选项模式的选项都是可选的，而且不可能在代码写完后自动扩展。</p>
<p dir="auto">所以，选项模式中可以认为一定有部分选项没有被配置过。新建的封装类一定在所有选项中可以运行的默认值。</p>
<p dir="auto">同样，因为有这个默契，大部分采用了选项模式架构的代码一定有很好的兼容行。因为添加的新的功能和实现必须与原有的行为表现一致。</p>
<p dir="auto">可以认为这是对代码结构的一种架构上的约束。</p>
<h2>基于功能/模块配置</h2>
<p dir="auto">选项模式的主要价值，就是体现在可以分块的，可选的进行配置。</p>
<p dir="auto">因此，从逻辑上来说，每个选项代表了一种功能，或者模块。</p>
<p dir="auto">具体来说，举个自理，我的go语言http请求库，默认情况下会生成一个标准请求。比如：</p>
<pre><code class="language-golang">var myreq=preset.New(Host("http://www.baidu.com/)
</code></pre>
<p dir="auto">如果我这是一个Post请求，需要带一个纯文字body，代码就变成了</p>
<pre><code class="language-golang">var myreq=preset.New(preset.Host("http://www.baidu.com/,preset.POST,preset.StringBody("12345"))
</code></pre>
<p dir="auto">而这个请求如果还需要带上一个特定的请求头，那么就是</p>
<pre><code class="language-golang">var mreq=preset.New(preset.Host("http://www.baidu.com/,preset.POST,preset.StringBody("12345"),preset.Header("auth","abc"))
</code></pre>
<p dir="auto">从这个例子应该能喊好的看出选项模式的主要用法了。</p>
<p dir="auto">在构建复杂系统时，按功能和模块来进行配置，同时提供很多预制件，可以直接初始化为需要的功能。</p>
<p dir="auto">在系统进行升级扩展时，由于保持默认行为的一致性，也会有很好的兼容性。</p>
<h2>在Mud机器人中的应用</h2>
<p dir="auto">从选项模式的特点来看</p>
<ul>
<li>系统复杂</li>
<li>高扩展性</li>
<li>功能化，模块化</li>
</ul>
<p dir="auto">也只有移动模块这个复杂系统需要用得上选项模式。</p>
<p dir="auto">我在newhelljs的移动模块就是使用了选项模式的架构，具体可以看相关的内容。</p>
]]></description><link>https://forum.hellclient.com/topic/38/深入浅出制作全自动mud机器人-选项模式</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 20:52:48 GMT</lastBuildDate><atom:link href="https://forum.hellclient.com/topic/38.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Feb 2026 07:03:01 GMT</pubDate><ttl>60</ttl></channel></rss>