一、为什么要使用模式呢?
我们在编码的过程当中,会写很多看起来很臃肿的代码,我们需要对这些代码的结构进行优化与重构。将一些比较稳定的,不容易改变的代码给它提取出来,放到一个接口或者是抽象类当中,然后将一些经常变动的代码放进具体的实现类当中,即接口与抽象类的子类当中,这样使我们所编写的代码具有强类聚,弱偶合的特点,这样使们我的程序具有很好的扩展性。
怎么来理解扩展性呢?
也就是说,我们经常会遇到需求不断改变的情况,一会说xxx你能不能给我实现xxx功能,一会儿又说你帮我在将xxx功能做个补充。此时所有的行动都集中在了一个字上面,那就是“变”。转到程序代码上来说,是怎么一回事儿呢?那就是要能够扩展功能,怎么办呢?使用接口、抽象类、具体实现的子类呗,把它们几个有条理的揉在一起。比如在接口中新增一个方法,然后在不同的子类当中去分别实现。或者说,在接口中定义方法,由抽象类实现接口,然后由具体的实现子类有选择的去实现接口中的方法。这些操作与设计模式当然是紧密相关的。
二、什么是策略模式?为什么要使用策略模式,它是来干什么的,它主要解决的问题是什么呢?
策略模式主要是解决类继承的一个问题。什么问题呢?
我们都知道,多个子类在继承了父类之后,子类中就可以使用父类中的方法,那么,如果当我们过一段时间之后,对父类中的某一个方法做一下修改,那么情况是怎样的呢?在多个子类中使用的这个方法,就同时受到影响。举个例子,我有一个鸭子类,这个鸭子类有一个方法叫做jiaoShen(),它有这样几个子类,黑鸭子,白鸭子类,这两个类里面都使用了父类jiaoShen()这个方法,如果在应用程序运用一段时间之后,一个不怎么了解这个应用程序的人来对超类鸭子类的jiaoShen()方法的代码做了一些修改,这时候,麻烦就大了,整个系统肯定就成问题了啊,子类里面的调用与之前的调用肯定不一样了,这就坏事了。
那么我们该怎么样来解决这个问题呢?我要保证我的这个jiaoShen()这个方法的改动,即不影响到黑鸭子,又不影响到白鸭子。我把叫声这个类定义成一个IJiaoShen接口,然后怎么做呢?在IJiaoShen接口中定义一个jiaoShen()这样一个方法,然后写几个不同叫声的子类去实现IJiaoShen这个接口,例如DiaoIJiaoShenImpl,XiaoIJiaoShenImpl,最后在这些子类中去实现jiaoShen()这个方法,也就是具体怎么叫.
为了使jiaoShen()这个方法能够在不同的子类中得到不同的叫声,因此只需要鸭子这个超类里面创建一个IJiaoShen接口类的一个引用,然后通过set()方法将这个引用赋予具体的叫声类,就可以得到不同的叫声了。子类在使用父类中的jiaoShen()这个方法的时候,它就可以得到不同的叫声了,即黑鸭子叫黑鸭子的,白鸭子叫白鸭子的。
三、策略模式演示代码
package com.celuemodel;
public class Duck {
protected IJiaoShen jiaoShen;
public void setJiaoShen(IJiaoShen jiaoShen) {
this.jiaoShen = jiaoShen;
}
public void swim(){
System.out.println("鸭子正在游泳!");
}
public void run(){
System.out.println("鸭子跑起来了!");
}
public void jiaoShen(IJiaoShen jiaoShen){
}
}
package com.celuemodel;
public class BlackDuck extends Duck {
public void jiaoShen(IJiaoShen jiaoShen){
System.out.println("黑鸭子叫起来了!");
jiaoShen.jiaoShen();
}
}
package com.celuemodel;
public class WhiteDuck extends Duck {
public void jiaoShen(IJiaoShen jiaoshen){
System.out.println("白鸭子叫起来了!");
jiaoshen.jiaoShen();
}
}
package com.celuemodel;
public interface IJiaoShen {
public void jiaoShen();
}
package com.celuemodel;
public class XiaoIJiaoShen implements IJiaoShen {
@Override
public void jiaoShen() {
System.out.println("小叫声!");
}
}
package com.celuemodel;
public class DaIJiaoShen implements IJiaoShen {
@Override
public void jiaoShen() {
System.out.println("大叫声!!!");
}
}
package com.celuemodel;
import org.junit.Before;
import org.junit.Test;
public class DuckTest {
private Duck duck;
@Before
public void setUp() throws Exception {
//duck = new WhiteDuck();
duck = new BlackDuck();
}
@Test
public void testJiaoShen(){
IJiaoShen ijiaoshen1 = new DaIJiaoShen();
IJiaoShen ijiaoshen2 = new XiaoIJiaoShen();
duck.jiaoShen(ijiaoshen1);
duck.jiaoShen(ijiaoshen2);
}
}
分享到:
相关推荐
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,我们经常遇到需要根据不同条件或场景动态地改变算法的情况。策略模式就是为了解决这类问题而诞生的,它允许我们用不同的策略(即算法)...
本文以项目中的一个工作流模块,演示责任链模式、策略模式、命令模式的组合实现!最近在做的一个项目,涉及到的是一个流程性质的需求。关于工程机械行业的服务流程:服务任务流程和备件发运流程。项目之初,需求不是...
针对传统库存管理模式的弊端,戴雀桥在其文章《浅谈多级分布式库存管理模式在海洋石油企业的应用》中提出了一个基于协调中心的多级分布式库存管理模式。这种模式强调从供应链整体的角度出发,协调和控制供应链上的...
本文将深入探讨这种管理模式在小学教育实践中的应用及其科学管理策略,旨在为小学教育管理者提供参考和启示。 以人为本的管理模式,其核心理念是将师生的需求和发展放在首位,以激发师生潜能和积极性为目标,构建...
电商平台如淘宝商城(现天猫)的提价策略,反映出B2C模式对信用体系、价格竞争以及服务质量的要求日益提升,同时,也显示出该模式的盈利潜力和市场前景。 四、B2C模式面临的困难 尽管B2C模式展现出强大的生命力,...
与传统教学模式相比,深度学习更注重全过程学习,强调学习过程的可视性,以及心灵感知的作用。 在小学数学深度学习的教学策略上,有几点是值得探讨的: 首先,营造良好的教学环境至关重要。由于小学数学较为抽象,...
### 快捷支付浅谈:便捷性和安全性分析 #### 一、引言 近年来,随着互联网技术的迅猛发展,各种新型支付方式不断涌现,其中快捷支付作为一种新兴的互联网支付模式,因其便捷的操作流程和较高的用户体验受到广泛...
这篇文档“浅谈网络营销的策略”将深入探讨这个主题,旨在帮助读者理解并掌握在网络环境中实施有效营销策略的关键点。 首先,网络营销的核心是了解目标市场和消费者。在数字化时代,消费者的行为模式发生了巨大变化...
星巴克的商业模式可以分为运营性和策略性两大类,两者共同构建了其独特的价值体系。 一、运营性商业模式 1. 产业价值链定位:星巴克位于咖啡产业链的下游,作为零售端,通过提供高质量的咖啡、糕点和相关商品,...
生鲜电商物流渠道下沉是指将电商物流配送体系从主要的城镇区域向农村地区拓展,旨在提升...生鲜电商物流下沉的成功实施将极大地促进农村地区的消费模式转变,提升农民的生活品质,并且推动整个生鲜电商行业的健康发展。
玩具行业的商业模式探讨集中在如何构建一个以知识产权(IP)为核心的泛娱乐...在这个过程中,IP的核心作用得到了强调,同时也提出了一个渐进式的IP布局模式,这被证明是符合大多数中小玩具企业当前发展阶段需求的策略。
鉴于上述问题,烟草企业财务管理模式的创新策略应包括: 1. 建立健全财务管理体系:烟草企业需要深刻理解现代企业管理思想,完善审批流程,明确岗位职责,实现重要岗位间的相互监督和制约。同时,要建立资产管理、...
本文将围绕“设计模式浅谈”这一主题,深入探讨设计模式的基本概念、核心原则以及在实际应用中的作用,特别关注创建型设计模式的介绍与应用。 首先,我们不得不面对这样一个现实:在软件开发过程中,代码的紧密耦合...
这篇文档“204-2 浅谈汽车营销策略(1)”深入探讨了汽车行业的营销之道,旨在为相关人员提供宝贵的指导。以下是对这个主题的详细解析。 一、市场分析 在制定营销策略之前,对市场进行深入分析至关重要。这包括了解...
在《设计模式浅谈24种》中,主要讨论了24种经典的GOF设计模式,这些模式被分为三大类:创建型、结构型和行为型。 创建型模式主要关注对象的创建,包括以下几个核心模式: 1. **Abstract Factory**(抽象工厂)模式...
本文将详细解读电商模式中原创服装品牌的重要性以及其运营策略。 首先,我们需要认识到服装行业本身的特点及发展趋势。服装作为人们生活的基本需求,随着我国经济的持续增长和人民生活水平的提高,其市场需求正变得...
本文将深入探讨电商模式如何助力原创服装品牌的创立与发展,以及运营策略的关键点。 首先,电商模式为原创服装品牌提供了广阔的市场空间。通过线上平台,品牌可以直接触达全国乃至全球的消费者,不再受限于实体店铺...
3. **分销策略**:4S店通常采用直销模式,但也可以通过线上平台进行销售。建立多渠道的销售网络,如电商平台、社交媒体等,能扩大市场覆盖,吸引更多潜在客户。 4. **促销策略**:定期举办优惠活动,如打折促销、...
本文主要探讨了电动汽车的四种主要控制策略:起步控制策略、标准模式控制策略、动力模式控制策略以及经济模式控制策略。 1. 电动汽车的起步控制策略: 起步阶段是电动汽车从静止状态加速到一定速度的过程。电机在此...
"204-2 浅谈汽车营销策略"的主题着重于探讨如何通过创新的营销手段来推动汽车销售和品牌建设。以下是对这一主题的详细分析: 一、市场定位 汽车营销策略的第一步是明确市场定位。这涉及对目标消费者进行深入研究,...