首页 > 其他分享 >软件设计模式-装饰者模式

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

时间:2024-09-22 15:46:22浏览次数:4  
标签:软件设计 Component component 模式 public 接口 operation 装饰

装饰模式
应用场景:
最基础用法:
当需要对类A的对象添加一些自定义不同的方法时,直接在类A中添加方法不太好!那么需要一个类B继承类A,类B里面增加一个类A的对象作为自己的成员并自定义一个方法Bfunc,再重载类A中的某个方法func,在该方法里面调用自己的Bfunc。
高级用法:假设要对男英雄和女英雄进行装饰(技能加点),那么他们应该都实现同一个接口(英雄),而装饰者也有不同类型(学习qwer技能)所以也应该实现同一个总装饰接口或者抽象类(学习技能)但由于装饰模式的含义是在原有基础上添加新方法,所以总装饰接口应当保留英雄的基本属性(即应当实现接口:英雄),具体看代码
// 组件接口(英雄)
public interface Component {
void operation();
}

// 具体组件类(男英雄或女英雄)
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent: 男英雄的基本操作");
}
}

// 装饰抽象类(学习技能)
public abstract class Decorator implements Component {
protected Component component; # 总装饰接口应当保留英雄的基本属性

public Decorator(Component component) {
    this.component = component;
}

@Override  # 实现了接口就要重写该接口里的函数
public void operation() {
    component.operation();  // 调用原始组件的操作
}

}

// 具体装饰类A,增加额外功能(学习q技能)
public class ConcreteDecoratorA extends Decorator {

public ConcreteDecoratorA(Component component) {
    super(component);
}

@Override
public void operation() {
    super.operation();  // 执行原始组件的操作
    addedBehavior();    // 增强操作
}

private void addedBehavior() {
    System.out.println("ConcreteDecoratorA: 学习q技能");
}

}

标签:软件设计,Component,component,模式,public,接口,operation,装饰
From: https://www.cnblogs.com/torrentgz/p/18425393

相关文章

  • c#代码介绍23种设计模式_03工厂模式
    目录1.工厂方法模式之所以可以解决简单工厂的模式2.使用工厂方法实现的系统,如果系统需要添加新产品时3.从UML图来看4、实现思路1.工厂方法模式之所以可以解决简单工厂的模式是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出......
  • C++ std::call_once 实现单例模式
    #if1#include<iostream>#include<memory>#include<mutex>usingnamespacestd;classSingleton{public:staticSingleton&getInstance(){std::call_once(m_OnceFlag,&Singleton::init);return*m_Insta......
  • 实现单例模式
    对于一些管理的类,且只需要创建一次对象的类我们可以把它设置为单例模式一、c#和unity中不继承MonoBehaviour如何实现单例模式:1.在类中创建改类的静态私有对象并且初始化堆区空间2.提供给外部一个静态的公共属性来获得改静态私有对象(只可以得不允许外部改,防止外部置空)3.写一......
  • 链动3+1滑落模式小程序开发
    链动3+1滑落模式是一种在电商、微商或社交电商领域常用的营销模式,通过用户推荐新用户形成团队结构,并依据团队的发展给予相应的奖励或优惠。在小程序平台上开发链动3+1滑落模式,需要考虑到用户体验、数据安全、奖励机制的实现等多个方面。以下是一些基本的开发步骤和考虑因素:1.......
  • LL学设计模式之最终章
    序学习过好多遍设计模式。感觉还是没学会。面试啥的又说不出来。这是最后一次了。忘了并不代表不会。知道个大概就行了为啥要学设计模式:1:阅读源代码的时候,知道是啥设计模式,就更容易看懂。2:为了写出好的容易扩展的代码。应对各种变化。简单。设计模式有指导原则。设计模式......
  • 增强 React 列表渲染:干净且可重用的模式
    作为react开发人员,我们都遇到过需要渲染数据列表的场景。虽然.map()方法效果很好,但每次渲染列表时重复相同的逻辑可能会让人筋疲力尽,并导致代码重复。幸运的是,有一种更干净、可扩展的方法来处理这个问题,使用可重用组件、高阶组件或自定义挂钩。在本文中,我将分享一种改进react......
  • 实景三维+耕地保护:构建耕地资源管理的全闭环新模式
    在耕地资源日益珍贵的今天,如何高效、精准地实施耕地保护,成为了我国农业可持续发展与生态文明建设的关键课题。“实景三维+耕地保护”的创新模式,能够为这一挑战提供突破性的解决方案,打造一个从前端监测到后端管理的全闭环耕地保护管理模式。本文将深入分析这一模式的核心价值、......
  • 【JavaWeb从入门到精通系列】 - JavaSE基础篇(1) - 抽象,静态,单例设计模式
    一、抽象1、存在意义似是而非的,像却又不是;具有某种特征,但不完整。Animal仅是一种会吃会睡的对象,再无其他行为,不够具体,不够完整。程序是用来模拟现实世界,解决实际问题的,现实世界中存在的都是动物具体的子类对象,并不存在动物对象,所以,Animal不应该被独立创建成对象。如何......
  • 化繁为简:中介者模式如何管理复杂对象交互
    化繁为简:中介者模式如何管理复杂对象交互中介者模式是一种行为型设计模式,定义了一个中介者对象,来封装一组对象之间的交互。中介者模式通过将对象之间的交互行为从多个对象中抽离出来,集中封装在一个中介者对象中,从而使各个对象之间的耦合松散,且可以独立地改变它们......
  • 观察者模式:如何发送消息变化的通知?
    观察者模式是一种非常流行的设计模式,也常被叫作订阅-发布模式。观察者模式在现代的软件开发中应用非常广泛,比如,商品系统、物流系统、监控系统、运营数据分析系统等。现在我们常说的基于事件驱动的架构,其实也是观察者模式的一种最佳实践。当我们观察某一个对象时,对象传递出的每一个......