`
chandler
  • 浏览: 81603 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

策略模式的私有变量处理

阅读更多

 

      这是我现在写的一个android小程序的简单的UML图。在图中,Money是抽象的父类。接口Analysis是策略类的接口。在这里,做为父类的Money有一个方法getAmount。通过策略模式来实现。
      最早对于Money的子类Entry其实现的getAmount方法的实现。就是把其内部的私有成员Amount返回出去就可以了。但是在这样写的时候,发觉了问题,也就是如果这样来做,那么也就违反了策略模式的初衷,减少了代码重用的机会。对于策略模式来说,其本质是使得相同方法的不同实现的代码能够被重用。所以当策略中的一个方法,在子类中被覆盖的时候,那么关于这个方法的代码就不能够被重用,那么这样的设计也就失去了策略模式的意义。
      对于这个问题,我的解决是把本该放在Entry里面的私有变量放入了具体的策略实现类,EntryAnalysis中来解决。这样就能够在策略类里面重写方法,达到了策略模式的目的。
      这样做之后,让我对类的成员变量作用产生了一点小小的改变。在过去,尽管来说我也喜欢通过方法来访问,比方说即使在bean中,我也是很喜欢用get方法来获取相关的成员变量。但是在我脑海里。有着成员变量就类的状态的参数的概念。由于这个概念的存在,也就发生了一开始的错误。因为在我看来,既然成员变量表示的是状态。那么就应该存在于类当中。但是在理清了这里的这个思路之后,我发生了改变。表示一个类的状态的方法可以是一个返回值,一个成员变量。只是很多时候,成员变量的比较方便而已。比如说这里,无论什么地方,Entry都有一个名字叫做amount的状态。无论什么地方,我都可以通过访问amount这个变量,或者得到getAmount这个返回值来获得Entry的状态值。同样的,getAmount这个方法会更加出色。
      回到策略模式,其实策略模式封装的不一定只是方法,也可以是变量。因为对于一个策略模式来说,其实封装的应该是可变的成分,其中包括了变量和方法。
       

 

  • 大小: 10.4 KB
0
0
分享到:
评论

相关推荐

    设计模式之单件模式、工厂模式、策略模式、观察者模式(php描述)(资料整理)

    通常,我们会定义一个私有静态成员变量来保存实例,同时提供一个静态方法来获取这个唯一的实例。这样做可以避免资源的浪费,尤其是在需要共享状态或者控制整个应用生命周期的对象时。 其次,工厂模式是一种创建型...

    策略模式和单一实例模式的运用1

    《策略模式与单例模式在复试系统中的应用》 在软件设计中,模式是一种解决常见问题的可重用方案。策略模式和单例模式是两种常见的设计模式,它们在实际项目中有着广泛的应用。本篇文章将详细介绍这两种模式,并结合...

    单例、工厂、策略模式C++、qt

    例如,你可以使用单例模式管理Qt应用程序的全局设置,工厂模式用于动态创建和管理不同类型的设备(如device文件中可能包含的各种硬件设备),而策略模式则可用于处理设备的多种工作模式或策略。 通过这样的设计,你...

    PHP设计模式之策略模式原理与用法实例分析

    本文实例讲述了PHP设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下: 策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装。...3. 定义环境角色类(私有化申明抽象角色变量,

    headfirst设计模式C++代码实现

    C++可以通过静态成员变量和私有构造函数来实现单例。工厂模式则用于创建对象,通过工厂方法将对象的创建过程封装起来,使得创建过程与具体类解耦。 装饰器模式允许在运行时动态地给对象添加新的行为或职责,它通过...

    C#程序变量统一管理例子

    6. 使用字段和属性:字段(field)是类中的私有变量,而属性(property)提供对这些字段的访问控制。属性允许你在访问变量时添加逻辑,如验证输入或缓存计算结果。 7. 静态与非静态:静态变量属于类,而非实例。...

    JavaScript模式中文[pdf] 百度云

    第1章 简介 ... 策略模式  外观模式  代理模式  中介者模式  观察者模式  小结  第8章 DOM和浏览器模式  关注分离  DOM脚本  事件  长期运行脚本  远程脚本  配置JavaScript  载入策略

    设计模式

    实现单例模式通常包括私有化构造函数、静态私有变量存储唯一实例以及公开的静态方法获取该实例。 4. 策略模式:策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于...

    C#设计模式(23种设计模式)

    在C#中实现单例模式通常通过私有构造函数和静态实例变量来完成。为了确保线程安全,可以使用懒加载技术或双重检查锁定(Double-Checked Locking)机制。 #### 2. 抽象工厂模式(Abstract Factory) 抽象工厂模式...

    Java设计模式面试题汇总

    包括责任链模式、命名模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式等。 常见设计模式: 工厂模式:工厂模式指由一个工厂对象来创建实例,客户端...

    软件设计模式实验报告

    首先,我们看到ReadConfig类有一个私有成员变量paramA用于存储读取的参数值,以及一个构造方法用于加载配置文件。在这个构造方法中,通过FileInputStream和Properties类来读取和解析ini文件,获取"data"的值。 实验...

    程序设计模式与架构

    行为型模式包括但不限于策略模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、模板方法模式和访问者模式等。 #### 网站开发架构模式 网站开发架构模式是指用于构建网站的通用结构和...

    GOF23设计模式讲解及C++源代码实现

    例如,单例模式在C++中通常使用静态成员变量和私有构造函数来确保一个类只有一个实例。工厂方法模式则通过定义一个创建对象的接口,但让子类决定实例化哪一个类,将类的实例化延迟到子类。而建造者模式则通过分步骤...

    设计模式解析和代码

    例如,单例模式通常通过私有化构造函数和静态成员变量来确保类只有一个实例;工厂模式则提供一个接口用于创建对象,但让子类决定实例化哪一个类;策略模式允许在运行时选择算法或策略,提高了代码灵活性。 “常见...

    JavaScript模式 斯托扬·斯特凡洛夫 著

    前言 第1章 简介 模式 JavaScript:基本概念 ...策略模式 外观模式 代理模式 中介者模式 观察者模式 小结 第8章 DOM和浏览器模式 关注分离 DOM脚本 事件 长期运行脚本 远程脚本 酉己置JavaScript 载入策略 小结

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    模块模式是JavaScript中实现封装和私有变量的一种方式。通过立即执行函数表达式(IIFE)和闭包,可以在全局作用域中创建独立的命名空间,防止变量污染。 六、观察者模式 观察者模式是一种行为设计模式,它定义了...

    c++ 各种设计模式 以及各种应用

    在C++中,可以使用智能指针和私有成员变量来实现,避免破坏封装的同时提供状态的保存与恢复功能。 5. **中介者模式(Mediator Pattern)** 中介者模式用一个中介对象协调多个对象之间的交互,降低了对象间的耦合度。...

    常用设计模式集锦(C++篇)

    例如,单例模式确保一个类只有一个实例,并提供全局访问点,C++可以通过静态成员变量和私有构造函数来实现。工厂模式则提供了一种创建对象的接口,但允许子类决定实例化哪个类,通过虚函数和多态性可以实现。 在...

    c++设计模式中文 个人整理

    例如,单例模式通过私有化构造函数和静态成员变量来确保类只有一个实例。工厂方法模式则利用虚函数实现类的抽象创建过程,让子类决定实例化哪个具体类。建造者模式通过分离构建过程和表示,允许创建复杂的对象结构。...

    HeadFirst设计模式代码

    - **策略模式**:定义一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户。 - **模板方法模式**:在抽象类中定义算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的...

Global site tag (gtag.js) - Google Analytics