`
apple307878412
  • 浏览: 11879 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

装饰者模式实践

阅读更多

 今天接到PD给的一个需求,我大概描述一下:

  1. 需要给报名了某个活动的商品打上一个主要的标记,记作:标记A
  2. 如果该商品的库存件数在100件以上并且是在该活动内首次上架,则再加一个标记,标为:标记B
  3. 如果该商品单日销量超过预期的销量后,则继续加上一个标记,记作:标记C
  4. 还有符合其他等等条件的商品还会标记上各种其他标记,每种条件一种标记。

注:只要是该活动的商品,则肯定存在标记A,其他都是可选的。

 

经过分析,个人觉得该业务场景很适合用装饰者模式来解决。

该模式的具体细节不多描述。。。度娘一下,你就知道。

 

《HeadFirst设计模式》 写道
动态地将责任附加到对象上。想要扩展功能,装饰者提供 有别于继承的另一种选择。

 

该场景中标记B、标记C等都是为标记A做装饰的。

 

下面附上本人的简单实现:

 

装饰者模式类图:

 

装饰者模式类图

 

 

包结构:

 

 

 

 

 

public abstract class TagComponent {   
  
    public String tagName = "base-tag";   
  
    public abstract void addTag();   
}   
/**标记A,被装饰者**/  
public class BrandSaleTag extends TagComponent {   
  
    public BrandSaleTag() {   
        tagName = "brand-sale-tag";   
    }   
  
    public void addTag() {   
        System.out.println(tagName);   
    }   
  
}   
/**装饰者基类**/  
public abstract class TagDecorator extends TagComponent {   
  
    @Override  
    public abstract void addTag();   
  
}   
/**标记C,装饰者**/  
public class HotSaleTag extends TagDecorator {   
  
    TagComponent tagComponent;   
  
    public HotSaleTag(TagComponent tagComponent) {   
        tagName = "hot-sale-tag";   
        this.tagComponent = tagComponent;   
    }   
  
    @Override  
    public void addTag() {   
        tagComponent.addTag();   
        // 需要添加的操作(装饰)   
        addHotSaleTag();   
    }   
  
    private void addHotSaleTag() {   
        System.out.println("add " + tagName);   
    }   
  
}   
  
/**标记B,装饰者**/  
public class NewGoodsTag extends TagDecorator {   
  
    TagComponent tagComponent;   
  
    public NewGoodsTag(TagComponent tagComponent) {   
        this.tagComponent = tagComponent;   
        tagName = "new-goods-tag";   
    }   
  
    @Override  
    public void addTag() {   
        tagComponent.addTag();   
        // 需要添加的操作(装饰)   
        addNewGoodsTag();   
    }   
  
    private void addNewGoodsTag() {   
        System.out.println("add " + tagName);   
    }   
}   
  
public class TagTest {   
  
    /**  
     * @author hemaodong  
     * @param args  
     */  
    public static void main(String[] args) {   
  
        TagComponent tagComponent = new BrandSaleTag();   
  
        TagDecorator decorator = new NewGoodsTag(new HotSaleTag(tagComponent));   
        decorator.addTag();   
    }   
  
}  

 

 

打印结果:

brand-sale-tag
add hot-sale-tag
add new-goods-tag

 

各位大神还有没有更好的点子?欢迎拍砖。

  • 大小: 13.6 KB
分享到:
评论

相关推荐

    装饰者模式Android实例

    装饰者模式是设计模式的一种,属于结构型模式,它的主要目的是动态地给对象添加新的行为或职责,而无需改变对象的原始代码。在Android开发中,装饰者模式的应用相当广泛,尤其是在视图组件的扩展和功能增强上。下面...

    装饰者模式——Decorator

    装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建...通过实践和理解装饰者模式,你的代码将变得更加灵活且易于维护。

    设计模式---装饰者模式

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的...通过阅读和实践 DecoratorPattern 文件中的示例代码,你可以更深入地理解装饰者模式的工作原理及其在实际项目中的应用。

    Decorator装饰者模式

    装饰者模式是一种面向对象的设计模式,它允许在运行时向对象添加新的行为或属性,而无需修改对象的原始代码。这种模式是结构型模式的一种,遵循开闭原则,即对扩展开放,对修改关闭。Head First系列的学习笔记是通过...

    经典装饰者模式.pdf

    ### 经典装饰者模式详解 #### 装饰者模式概述 装饰者模式是一种结构型设计模式,它允许向对象动态地添加新功能。这种模式通过创建包含被装饰对象引用的对象来工作,并且可以在运行时增加或改变其行为。与继承相比...

    装饰者模式源代码java

    装饰者模式是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过动态地添加职责来扩展对象的功能。...在设计模式的实践中,熟练掌握装饰者模式能帮助开发者更好地应对复杂的业务需求。

    JAVA设计模式学习12——装饰器模式

    2. **动态性**:装饰模式允许我们在运行时动态地为对象添加新功能,而无需修改代码。 3. **组合性**:通过多个装饰者的叠加,可以实现更复杂的功能,这比使用继承来扩展功能更加灵活。 4. **职责分离**:装饰者模式...

    java装饰者模式做的图片工具类

    在Java编程中,装饰者模式是一种结构型设计模式,它允许在运行时为对象添加新的行为或职责,而无需...对于初学者来说,这是一个很好的实践设计模式的案例,可以帮助理解如何在实际开发中运用设计模式来解决复杂问题。

    java装饰者模式代码

    装饰者模式是面向对象设计模式中的一种,它允许在运行时动态地给对象添加新的行为或职责,而无需修改原有代码。...初学者可以通过学习和实践这个例子,更好地理解和运用装饰者模式,提升自己的编程技能。

    设计模式实例 装饰 工厂 桥梁 观察者

    装饰模式是一种结构型设计模式,允许动态地给一个对象添加新的行为或责任,而无需修改它的源代码。在Java中,装饰者通常实现与被装饰对象相同的接口,以便可以在任何时候替换或添加功能。这种模式的关键在于,装饰...

    装饰者模式

    至于文件列表中的`mytest`,这可能是包含了一些示例代码或者测试用例,帮助你更好地理解和实践装饰者模式。在查看这个文件时,你可以找寻以下几个关键点: 1. 查看`Component`接口或抽象类的定义,了解基础对象的...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    装饰模式小应用

    装饰模式是一种设计模式,它允许我们在不改变对象本身的情况下,为对象添加新的行为或属性,从而扩展其功能。这种模式遵循“开闭原则”,即对...在实践中,理解并熟练运用装饰模式,能够提高软件的可维护性和可扩展性。

    Java 设计模式最佳实践

    Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...

    深入浅出设计模式三——Beverage实现(装饰者模式)

    "深入浅出设计模式三——Beverage实现(装饰者模式)"这一标题指出,我们将探讨如何使用装饰者模式来实现一个饮品系统。装饰者模式是一种结构型设计模式,它允许我们在运行时向对象添加新的行为或职责,而无需修改对象...

    设计模式之装饰模式

    在"设计模式之装饰模式"的学习过程中,你可以深入理解装饰者如何工作,通过实例来实践如何创建装饰者和具体装饰者类,以及如何通过它们来扩展对象的功能。这将帮助你更好地掌握在实际项目中如何运用装饰模式,提高...

    实验九:装饰模式.rar

    总结来说,"实验九:装饰模式.rar"中的示例旨在帮助学习者理解装饰模式的基本概念和用法,通过小猪游戏、肖像画装饰和咖啡茶定制这三个具体的场景,展示了如何在实际应用中灵活运用装饰模式,以实现代码的扩展性和可...

    装饰着模式

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。...通过实践和案例分析,我们可以更好地理解装饰者模式如何工作,以及何时应该使用它来解决特定问题。

    RPG与设计模式(一)装饰模式 的源码

    在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定情境下解决常见问题的最佳实践。本文将深入探讨“装饰模式”这一...如果你对Java编程和设计模式感兴趣,深入理解并实践装饰模式无疑会提升你的编程技能。

    生日蛋糕订购系统java编写结合装饰者模式工厂模式和策略模式对蛋糕进行打折

    在Java编程中,装饰者模式、工厂模式和策略模式是三种常用的设计模式,用于提高代码的灵活性和可扩展性。在这个“生日蛋糕订购系统”中,这些模式的结合应用有助于构建一个高效且易于维护的订单处理系统。 首先,让...

Global site tag (gtag.js) - Google Analytics