当前位置: 首页 > news >正文

wordpress seo优化关键词分类</h1> <div class="entry-meta"> <span class="entry-category"> <a href="/news.html" target="_blank">news</a></span> <span class="entry-date">2026/4/7 10:42:53</span> <span class="sticky-meta-right"> <span class="meta-right"> </span> </div> </div> </header> wordpress <title>,seo优化关键词分类,网站建设视频,游戏后端开发Java 中的设计模式&#xff1a;经典与现代实践 1. 设计模式简介 设计模式是一种软件开发中的思想&#xff0c;它为我们提供了一些经过验证的、能够应对常见问题的解决方案。学习和掌握设计模式能够让开发者在面对复杂的需求时&#xff0c;能够设计出更加灵活、可维护的代码。…<article class="baidu_pl"><div id="article_content" class="article_content clearfix"><div id="content_views" class="markdown_views prism-atom-one-dark"><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><h2><a id="Java__0"></a>Java 中的设计模式:经典与现代实践</h2> <h3><a id="1__2"></a>1. 设计模式简介</h3> <p>设计模式是一种软件开发中的思想,它为我们提供了一些经过验证的、能够应对常见问题的解决方案。学习和掌握设计模式能够让开发者在面对复杂的需求时,能够设计出更加灵活、可维护的代码。现代 Java 语言的特点(如 <strong>Lambda 表达式</strong>、<strong>Stream API</strong>、<strong>Optional</strong>)使得设计模式的实现更加简洁和高效。</p> <p>设计模式按照其功能可以分为三大类:</p> <ol><li><strong>创建型模式</strong>:用于对象创建,避免直接实例化。</li><li><strong>结构型模式</strong>:用于类和对象的组合,解决系统中类之间的关系问题。</li><li><strong>行为型模式</strong>:描述对象之间的交互和职责划分。</li></ol> <p>在这篇文章中,我们将通过现代 Java 的特性来重构经典设计模式的实现,帮助开发者更好地理解和运用设计模式。</p> <hr /> <h3><a id="2__16"></a>2. 创建型设计模式</h3> <h4><a id="21_Factory_Pattern_18"></a><strong>2.1 工厂模式(Factory Pattern)</strong></h4> <h5><a id="_20"></a><strong>经典实现</strong></h5> <p>工厂模式通过封装对象的创建逻辑,将客户端与具体类的实例化解耦。通常适用于在创建对象时需要复杂逻辑或者希望通过参数控制生成不同对象的场景。</p> <h5><a id="_24"></a><strong>经典代码示例</strong></h5> <pre><code class="prism language-java"><span class="token comment">// 产品接口</span> <span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">Car</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">void</span> <span class="token function">drive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token comment">// 具体产品类</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BMW</span> <span class="token keyword">implements</span> <span class="token class-name">Car</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">drive</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Driving BMW..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Audi</span> <span class="token keyword">implements</span> <span class="token class-name">Car</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">drive</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Driving Audi..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token comment">// 工厂类</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CarFactory</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">Car</span> <span class="token function">createCar</span><span class="token punctuation">(</span><span class="token class-name">String</span> type<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">switch</span> <span class="token punctuation">(</span>type<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">case</span> <span class="token string">"bmw"</span><span class="token operator">:</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">BMW</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">case</span> <span class="token string">"audi"</span><span class="token operator">:</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Audi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">default</span><span class="token operator">:</span> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"Unknown car type"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="_Java__Lambda__59"></a><strong>现代 Java 实现:使用 Lambda 表达式</strong></h5> <p>我们可以使用 <strong>Lambda 表达式</strong>来简化工厂模式的实现,减少冗长的 <code>if-else</code> 或 <code>switch</code> 语句,使得代码更简洁、灵活。</p> <pre><code class="prism language-java"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">HashMap</span></span><span class="token punctuation">;</span> <span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Map</span></span><span class="token punctuation">;</span> <span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>function<span class="token punctuation">.</span></span><span class="token class-name">Supplier</span></span><span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CarFactory</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Supplier</span><span class="token punctuation"><</span><span class="token class-name">Car</span><span class="token punctuation">></span><span class="token punctuation">></span></span> carRegistry <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">static</span> <span class="token punctuation">{<!-- --></span>carRegistry<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"bmw"</span><span class="token punctuation">,</span> <span class="token class-name">BMW</span><span class="token operator">::</span><span class="token keyword">new</span><span class="token punctuation">)</span><span class="token punctuation">;</span>carRegistry<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"audi"</span><span class="token punctuation">,</span> <span class="token class-name">Audi</span><span class="token operator">::</span><span class="token keyword">new</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">Car</span> <span class="token function">createCar</span><span class="token punctuation">(</span><span class="token class-name">String</span> type<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">Supplier</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">Car</span><span class="token punctuation">></span></span> carSupplier <span class="token operator">=</span> carRegistry<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>type<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">if</span> <span class="token punctuation">(</span>carSupplier <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"Unknown car type"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">return</span> carSupplier<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="Spring__86"></a><strong>Spring 框架中的工厂模式</strong></h5> <p>在 Spring 框架中,<code>ApplicationContext</code> 就是工厂模式的实现,它负责实例化并管理 Bean。</p> <pre><code class="prism language-java"><span class="token comment">// Spring 通过工厂模式实例化 Bean</span> <span class="token class-name">ApplicationContext</span> context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"applicationContext.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Car</span> car <span class="token operator">=</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">"car"</span><span class="token punctuation">,</span> <span class="token class-name">Car</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span> car<span class="token punctuation">.</span><span class="token function">drive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <hr /> <h3><a id="3__99"></a>3. 结构型设计模式</h3> <h4><a id="31_Proxy_Pattern_101"></a><strong>3.1 代理模式(Proxy Pattern)</strong></h4> <h5><a id="_103"></a><strong>经典实现</strong></h5> <p>代理模式通过引入代理对象来控制对真实对象的访问。代理对象可以在调用目标对象之前或之后增加额外的逻辑,比如日志、权限控制等。</p> <h5><a id="_107"></a><strong>经典代码示例</strong></h5> <pre><code class="prism language-java"><span class="token comment">// 服务接口</span> <span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">UserService</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">void</span> <span class="token function">createUser</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token comment">// 真实服务类</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RealUserService</span> <span class="token keyword">implements</span> <span class="token class-name">UserService</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">createUser</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Creating user: "</span> <span class="token operator">+</span> username<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token comment">// 代理类</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserServiceProxy</span> <span class="token keyword">implements</span> <span class="token class-name">UserService</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">RealUserService</span> realUserService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RealUserService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">createUser</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Logging: Start creating user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>realUserService<span class="token punctuation">.</span><span class="token function">createUser</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Logging: End creating user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="_Java__Java_8__Stream__Optional_136"></a><strong>现代 Java 实现:使用 Java 8 的 <code>Stream</code> 和 <code>Optional</code></strong></h5> <p>我们可以利用 <strong>Java 8 的 Optional</strong> 来避免 <code>null</code> 值的处理,并使用 <strong>Stream API</strong> 来简化数据的处理。</p> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserServiceProxy</span> <span class="token keyword">implements</span> <span class="token class-name">UserService</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">RealUserService</span> realUserService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RealUserService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">createUser</span><span class="token punctuation">(</span><span class="token class-name">String</span> username<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">Optional</span><span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>name <span class="token operator">-></span> <span class="token operator">!</span>name<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ifPresentOrElse</span><span class="token punctuation">(</span>name <span class="token operator">-></span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Logging: Start creating user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>realUserService<span class="token punctuation">.</span><span class="token function">createUser</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Logging: End creating user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Invalid username"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="Spring_AOP__160"></a><strong>Spring AOP 中的代理模式</strong></h5> <p>Spring 的 AOP(面向切面编程)就是利用代理模式来增强目标方法的功能。Spring 使用 <strong>JDK 动态代理</strong> 或 <strong>CGLIB 代理</strong> 来生成代理对象。</p> <pre><code class="prism language-java"><span class="token annotation punctuation">@Service</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">OrderService</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Transactional</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">createOrder</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token comment">// 事务管理由代理类处理</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <hr /> <h3><a id="4__176"></a>4. 行为型设计模式</h3> <h4><a id="41_Strategy_Pattern_178"></a><strong>4.1 策略模式(Strategy Pattern)</strong></h4> <h5><a id="_180"></a><strong>经典实现</strong></h5> <p>策略模式通过定义一系列算法并将每个算法封装到独立的策略类中,使得算法的选择和使用变得灵活。策略模式能够在运行时动态地改变策略。</p> <h5><a id="_184"></a><strong>经典代码示例</strong></h5> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">PaymentStrategy</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">void</span> <span class="token function">pay</span><span class="token punctuation">(</span><span class="token keyword">int</span> amount<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CreditCardPayment</span> <span class="token keyword">implements</span> <span class="token class-name">PaymentStrategy</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">pay</span><span class="token punctuation">(</span><span class="token keyword">int</span> amount<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Paying "</span> <span class="token operator">+</span> amount <span class="token operator">+</span> <span class="token string">" using Credit Card"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PayPalPayment</span> <span class="token keyword">implements</span> <span class="token class-name">PaymentStrategy</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">pay</span><span class="token punctuation">(</span><span class="token keyword">int</span> amount<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Paying "</span> <span class="token operator">+</span> amount <span class="token operator">+</span> <span class="token string">" using PayPal"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PaymentContext</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token class-name">PaymentStrategy</span> strategy<span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPaymentStrategy</span><span class="token punctuation">(</span><span class="token class-name">PaymentStrategy</span> strategy<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">this</span><span class="token punctuation">.</span>strategy <span class="token operator">=</span> strategy<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">executePayment</span><span class="token punctuation">(</span><span class="token keyword">int</span> amount<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>strategy<span class="token punctuation">.</span><span class="token function">pay</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="_Java__Stream__218"></a><strong>现代 Java 实现:使用 <code>Stream</code> 进行策略选择</strong></h5> <p>可以通过 <strong>Stream API</strong> 来简化策略的选择过程,让代码更加简洁和优雅。</p> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PaymentContext</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">PaymentStrategy</span><span class="token punctuation">></span></span> strategies <span class="token operator">=</span> <span class="token class-name">Map</span><span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span><span class="token string">"credit"</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">CreditCardPayment</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">"paypal"</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">PayPalPayment</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">executePayment</span><span class="token punctuation">(</span><span class="token class-name">String</span> paymentType<span class="token punctuation">,</span> <span class="token keyword">int</span> amount<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">Optional</span><span class="token punctuation">.</span><span class="token function">ofNullable</span><span class="token punctuation">(</span>strategies<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>paymentType<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ifPresentOrElse</span><span class="token punctuation">(</span>strategy <span class="token operator">-></span> strategy<span class="token punctuation">.</span><span class="token function">pay</span><span class="token punctuation">(</span>amount<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Invalid payment method"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="Spring__239"></a><strong>Spring 中的策略模式</strong></h5> <p>Spring 中的 <code>HandlerMapping</code> 就是使用策略模式的一个例子,它通过不同的请求类型和处理器选择不同的处理策略。</p> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">HandlerAdapter</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">boolean</span> <span class="token function">supports</span><span class="token punctuation">(</span><span class="token class-name">Object</span> handler<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">ModelAndView</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> request<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> response<span class="token punctuation">,</span> <span class="token class-name">Object</span> handler<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>不同类型的 <code>HandlerAdapter</code> 处理不同的 <code>Controller</code>,如 <code>SimpleControllerHandlerAdapter</code> 处理 <code>SimpleController</code>。</p> <hr /> <h3><a id="5_Template_Method_Pattern_254"></a>5. 模板方法模式(Template Method Pattern)</h3> <h5><a id="_256"></a><strong>经典实现</strong></h5> <p>模板方法模式通过定义一个算法的骨架,将某些步骤的实现延迟到子类中。这样,子类可以在保留算法结构的同时定制部分实现。</p> <h5><a id="_260"></a><strong>经典代码示例</strong></h5> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">DataProcessor</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">process</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">readData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">processData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">writeData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">readData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">processData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">writeData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CSVDataProcessor</span> <span class="token keyword">extends</span> <span class="token class-name">DataProcessor</span> <span class="token punctuation">{<!-- --></span><span class="token annotation punctuation">@Override</span><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">readData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Reading CSV data..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token annotation punctuation">@Override</span><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">processData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Processing CSV data..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token annotation punctuation">@Override</span><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">writeData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Writing CSV data..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5><a id="_Java__Lambda__Optional_293"></a><strong>现代 Java 实现:使用 Lambda 表达式和 Optional</strong></h5> <p>我们可以结合 <strong>Lambda 表达式</strong> 来动态传入处理步骤,让模板方法的使用更加灵活。</p> <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">DataProcessor</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">process</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token function">processStep</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token operator">::</span><span class="token function">readData</span><span class="token punctuation">,</span> <span class="token string">"Reading"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">processStep</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token operator">::</span><span class="token function">processData</span><span class="token punctuation">,</span> <span class="token string">"Processing"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">processStep</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token operator">::</span><span class="token function">writeData</span><span class="token punctuation">,</span> <span class="token string">"Writing"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">processStep</span><span class="token punctuation">(</span><span class="token class-name">Runnable</span> step<span class="token punctuation">,</span> <span class="token class-name">String</span> stepName<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>stepName <span class="token operator">+</span> <span class="token string">" data..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>step<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">readData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">processData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">writeData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <hr /> <h3><a id="6__318"></a>6. 总结</h3> <p>通过结合现代 Java 特性,我们可以让经典的设计模式变得更加简洁和高效。 <strong>Lambda 表达式</strong> 和 <strong>Stream API</strong> 为我们的设计模式实现提供了更灵活的方式,而 <strong>Optional</strong> 可以帮助我们避免空指针异常,使得代码更加健壮。</p> <p>在实际的项目开发中,理解和运用设计模式能够大大提高代码的可维护性和可扩展性。希望本文的示例能够帮助你更好地理解设计模式,并在实际开发中灵活运用。</p></div></div> <div id="vip"><a class="submit" onclick="showArticle()">查看全文</a></div> <div class="entry-copyright"> <!--<span class="source_url"></span><br>--> <span class="Disclaimers"><a href="http://www.hkea.cn/news/89231/">http://www.hkea.cn/news/89231/</a></span> <span class="email"></span> </div> <div class="gkt-entry-xgwz clear" style="margin-bottom:8px;"> <h3>相关文章:</h3> <li> <a href="/news/89182/">怎么用dw做静态网站b站好看的纪录片免费</a> </li> <li> <a href="/news/89015/">济南网站建设那家好网站制作公司有哪些</a> </li> <li> <a href="/news/88848/">域名和网站名不一样营销公司</a> </li> <li> <a href="/news/88681/">discuz做电影网站免费网站seo</a> </li> <li> <a href="/news/88514/">惠民建设局网站明年2024年有疫情吗</a> </li> <li> <a href="/news/88347/">卫龙的网站是谁做的今日的新闻</a> </li> <li> <a href="/news/88180/">厚街找人做网站动态网站设计</a> </li> <li> <a href="/news/88013/">永春县住房和城乡规划建设局网站太原seo排名优化软件</a> </li> <li> <a href="/news/87846/">怎么上网站后台爱站小工具计算器</a> </li> <li> <a href="/news/87679/">网页编辑岗位职责seo上海优化</a> </li> <li> <a href="/news/87345/">网站做二维码吗做网站的外包公司</a> </li> <li> <a href="/news/87178/">郑州市中原区疫情最新消息上海网站营销seo方案</a> </li> <li> <a href="/news/87011/">狂人站群系统中国最权威的网站排名</a> </li> <li> <a href="/news/86844/">简单网站开发实例网站运营工作的基本内容</a> </li> <li> <a href="/news/86510/">飞机免费代理ip爱站网seo综合查询工具</a> </li> <li> <a href="/news/86343/">河南焦作有做网站开发的公司吗巩义网络推广公司</a> </li> <li> <a href="/news/86176/">邓州做网站网络广告有哪些形式</a> </li> <li> <a href="/news/86009/">爬闪数媒 网站建设网站建站流程</a> </li> <li> <a href="/news/85842/">网站建设广州白云百度统计app下载</a> </li> <li> <a href="/news/85675/">惠州短视频seoseowhy论坛</a> </li> <li> <a href="/news/85508/">肇庆网站快速排名优化温州seo排名公司</a> </li> <li> <a href="/news/85174/">北京疫情死亡人数最新消息王通seo赚钱培训</a> </li> <li> <a href="/news/85007/">北京做网站的外包公司营销策划方案案例范文</a> </li> <li> <a href="/news/84673/">专业做酒店网站关键词优化排名软件流量词</a> </li> <li> <a href="/news/84339/">做网站推广代理上海网络推广服务</a> </li> <li> <a href="/news/84172/">wordpress可以做大吗搜索引擎优化的英语简称</a> </li> <li> <a href="/news/84005/">民治专业做网站公司中国企业500强排行榜</a> </li> <li> <a href="/news/83838/">潍坊 公司 网站seo点击排名器</a> </li> <li> <a href="/news/83671/">网站可以做赌博广告建站宝盒</a> </li> <li> <a href="/news/83170/">运城市做网站英文seo外链</a> </li> </div> </article> </main> </div> </div> <aside id="secondary" class="widget-area sidebar"> <div class="widget widget_posts_thumbnail" style="margin-top:6px;"> <h2 class="widget-title">最新文章</h2> <ul> <li class="clear"> <a href="/news/14166744/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/邻水建设局网站深圳互联时空网站优化怎么样" alt=" 邻水建设局网站深圳互联时空网站优化怎么样" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166744/" rel="bookmark"> 邻水建设局网站深圳互联时空网站优化怎么样</a> <div class="entry-meta">2026/4/7 10:42:52</div></div> </li> <li class="clear"> <a href="/news/14166743/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/网站建设合同违约责任网上帮人做网站" alt=" 网站建设合同违约责任网上帮人做网站" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166743/" rel="bookmark"> 网站建设合同违约责任网上帮人做网站</a> <div class="entry-meta">2026/4/7 10:42:46</div></div> </li> <li class="clear"> <a href="/news/14166742/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/网站建设的价格免费的好网站" alt=" 网站建设的价格免费的好网站" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166742/" rel="bookmark"> 网站建设的价格免费的好网站</a> <div class="entry-meta">2026/4/7 10:42:40</div></div> </li> <li class="clear"> <a href="/news/14166741/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/网站建设怎样推广深圳网络营销推广培训" alt=" 网站建设怎样推广深圳网络营销推广培训" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166741/" rel="bookmark"> 网站建设怎样推广深圳网络营销推广培训</a> <div class="entry-meta">2026/4/7 10:42:34</div></div> </li> <li class="clear"> <a href="/news/14166740/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/制作网站的基本步骤是视频做动图的网站" alt=" 制作网站的基本步骤是视频做动图的网站" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166740/" rel="bookmark"> 制作网站的基本步骤是视频做动图的网站</a> <div class="entry-meta">2026/4/7 10:42:27</div></div> </li> <li class="clear"> <a href="/news/14166739/" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/做网站的公司倒闭asp.net 网站 方案" alt=" 做网站的公司倒闭asp.net 网站 方案" /> </div> </a> <div class="entry-wrap"> <a href="/news/14166739/" rel="bookmark"> 做网站的公司倒闭asp.net 网站 方案</a> <div class="entry-meta">2026/4/7 10:42:21</div></div> </li> </ul> </div> <div class="leftdiv2"> </div> </aside> </div> <footer id="colophon" class="site-footer"> <div class="clear"></div> <div id="site-bottom" class="clear"> <div class="container"> <div class="menu-m_footer-container"> <ul id="footer-menu" class="footer-nav"> <li> <strong> <a href="/">核客编程介绍</a></strong> </li> <li> <strong> <a href="/">商务合作</a></strong> </li> <li> <strong> <a href="/">免责声明</a></strong> </li> </ul> </div> <div class="site-info"> <p>CopyRight © <a href="/">核客编程</a>版权所有 </p> </div> </div> </div> </footer> </div> <div id="back-top"> <a href="#top" title="返回顶部"> <svg width="38" height="38" viewbox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect width="48" height="48" fill="white" fill-opacity="0.01" /> <path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#3d4de6" stroke="#3d4de6" stroke-width="4" stroke-linejoin="round" /> <path d="M24 33.5V15.5" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" /> <path d="M33 24.5L24 15.5L15 24.5" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" /></svg> </a> </div> <script src='/templates/nzzt/js/common.js'></script> <script> $(function(){ $('.source_url').text('原文地址:https://blog.csdn.net/qq_36534560/article/details/145312118'); }); /*$('.source_url').on("click",function() { window.open('https://blog.csdn.net/qq_36534560/article/details/145312118', '_blank'); });*/ </script> </body> </html>