每日总结

软件设计                  石家庄铁道大学信息学院

 

实验11:装饰模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解装饰模式的动机,掌握该模式的结构;

2、能够利用装饰模式解决实际问题。

 


[实验任务一]:手机功能的升级

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。  

实验要求:

1.    提交类图;

 

2.    提交源代码;

Java:

Client.java:

package com.rjsjHomework03.decorator;

 

public class Client {

    public static void main(String[] args) {

        Phone sp,jp,cp;

        sp = new SimplePhone();

        sp.ring();

        System.out.println();

        System.out.println("------------------");

        jp = new JarPhone(sp);

        jp.ring();

        System.out.println();

        System.out.println("------------------");

        cp = new ComplexPhone(jp);

        cp.ring();

    }

}

ComplexPhone.java:

package com.rjsjHomework03.decorator;

 

public class ComplexPhone extends PhoneDecorator{

    public ComplexPhone(Phone phone) {

        super(phone);

    }

    public void ring(){

        super.ring();

        light();

    }

 

    public void light(){

        System.out.println("发出灯光闪烁提醒主人");

    }

}

JarPhone.java:

package com.rjsjHomework03.decorator;

 

public class JarPhone extends PhoneDecorator{

    public JarPhone(Phone phone) {

        super(phone);

    }

 

    public void ring(){

        super.ring();

        shock();

    }

 

    public void shock(){

        System.out.println("震动提醒主人");

    }

}

Phone.java:

package com.rjsjHomework03.decorator;

 

public interface Phone {

    void ring();

}

PhoneDecorator.java:

package com.rjsjHomework03.decorator;

 

public class PhoneDecorator implements Phone{

    private Phone phone;

 

    public PhoneDecorator(Phone phone) {

        this.phone = phone;

    }

 

    @Override

    public void ring() {

        phone.ring();

    }

 

}

 

SimplePhone.java:

package com.rjsjHomework03.decorator;

 

public class SimplePhone implements Phone{

 

    @Override

    public void ring() {

        System.out.println("发出声音提醒主人");

    }

}

 

C++:

#include<iostream>

using namespace std;

class Phone{

public:

    virtual void call()=0;

};

class SimplePhone:public Phone{

public:

    void call() override{

        cout<<"接听电话,发出声响"<<endl;

    }

};

class AdvancePhone:public Phone{

private:

    Phone *phone;

public:

    explicit AdvancePhone(Phone *phone1){

        this->phone=phone1;

    }

    void call() override{

        this->phone->call();

    }

};

class JarPhone:public AdvancePhone{

public:

    explicit JarPhone(Phone *phone1) : AdvancePhone(phone1) {

 

    }

    void call() override{

        AdvancePhone::call();

        this->shake();

    }

    void shake(){

        cout<<"---发出震动"<<endl;

    }

};

class ComplexPhone:public AdvancePhone{

public:

    explicit ComplexPhone(Phone *phone1): AdvancePhone(phone1){

 

    }

    void call() override{

        AdvancePhone::call();

        this->light();

    }

    void light(){

        cout<<"---发出灯光闪烁"<<endl;

    }

};

int main(){

    Phone *simple,*jar,*complex;

    simple=new SimplePhone();

    jar=new JarPhone(simple);

    complex=new ComplexPhone(jar);

    simple->call();

    jar->call();

    complex->call();

    return 0;

}

运行截图:

C++:

 

Java:

 

3.注意编程规范。

 

 

posted @   南北啊  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
1 2 3
4
点击右上角即可分享
微信分享提示