装饰者模式

装饰者模式作为继承的替代方案,用于为现有类添加功能。本文通过一个考试报告的场景来说明装饰者模式的运用:创建报告接口、实现接口、定义公共装饰类及具体装饰类(如最高分和班级排名),并展示如何调用这些装饰类以实现功能扩展。该模式允许装饰类和被装饰类独立发展,降低耦合,但多层装饰可能导致复杂性增加。

原文地址:https://www.jianshu.com/p/2fe021a2a9df

为现有的类增加功能,是继承的一种替代方式
类图如下

 

装饰者模式类图

假设一个场景
我们在学校要考试,然后要给家长签字,说分数之前你要先汇报一下班级最好成绩,然后说出你的分数之后,在说出你在班级的排名
1,建立一个抽象的报告接口

public interface SchoolReport {
    void report();
    void sign(String name);
}

2,实现这个成绩报告接口

public class FourthGradeSchoolReport implements SchoolReport{
    @Override
    public void report() {
        System.out.println("尊敬的家长");
        System.out.println("``````````");
        System.out.println("语文 62 数学 65 体育89 自然63");
        System.out.println("``````````");
        System.out.println("家长签名:");
    }

    @Override
    public void sign(String name) {
        System.out.println("家长签名为:" +name);
    }
}

3,建立一个公共装饰类,具体的装饰要在具体装饰类中定义


    private SchoolReport sr;

    public Decorator(SchoolReport sr){
        this.sr = sr;
    }


    @Override
    public void report() {
        this.sr.report();
    }

    @Override
    public void sign(String name) {
        this.sr.sign(name);
    }
}

5,创建具体的装饰,最高分装饰类

public class HighScoreDecorator extends Decorator{

    public HighScoreDecorator(SchoolReport sr) {
        super(sr);
    }

    private void reportHighScore(){
        System.out.println("这次考试最高分 语文 75 数学 78 体育93 自然80");
    }

    @Override
    public void report() {
        this.reportHighScore();
        super.report();
    }
}

6,学校排名装饰类

public class SortScoreDecorator extends Decorator{

    public SortScoreDecorator(SchoolReport sr) {
        super(sr);
    }

    private void reportSort(){
        System.out.println("我的排名第38名");
    }

    @Override
    public void report() {
        super.report();
        this.reportSort();
    }
}

7,实现调用

public class Main {
    public static void main(String[] args){
        SchoolReport sr = new FourthGradeSchoolReport();
        sr = new HighScoreDecorator(sr);
        sr = new SortScoreDecorator(sr);
        sr.report();
        sr.sign("张三");
    }
}

总结,如果说我们要实现更多的功能可以创建更多的装饰具体装饰类,装饰类和被装饰类可独立发展,互相不耦合
缺点是,多层装饰比较复杂

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值