11.13 实验十一装饰模式 实验十二外观模式

实验11:装饰模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解装饰模式的动机,掌握该模式的结构;
2、能够利用装饰模式解决实际问题。

[实验任务一]:手机功能的升级
用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。
实验要求:
1.提交类图;
2.提交源代码;
3.注意编程规范。
image

#include <iostream>
using namespace std;
 
class Phone
{
public:
    virtual void receiveCall(){};
};
 
class SimplePhone:public Phone
{
public:
    virtual void receiveCall(){
        cout<<"发出声音!"<<endl;
    }
};
 
 
class PhoneDecorator:public Phone {
protected:
    Phone *phone;
 
public:
    PhoneDecorator(Phone *p)
    {
        phone=p;
    }
    virtual void receiveCall()
    {
        phone->receiveCall();
    }
};
 
 
class JarPhone:public PhoneDecorator{
public:
    JarPhone(Phone *p):PhoneDecorator(p){}
    void receiveCall()
    {
        phone->receiveCall();
        cout<<"会震动!"<<endl;
    }
};
 
class ComplexPhone:public PhoneDecorator{
public:
    ComplexPhone(Phone *p):PhoneDecorator(p){}
    void receiveCall()
    {
        phone->receiveCall();
        cout<<"会发光!"<<endl;
    }
};
 
int main()
{
    Phone *p1=new SimplePhone();
    p1->receiveCall();
    cout<<"Jarphone"<<endl;
    Phone *p2=new JarPhone(p1);
    p2->receiveCall();
    cout<<"ComplexPhone"<<endl;
    Phone *p3=new ComplexPhone(p2);
    p3->receiveCall();
    return 0;
}

实验12:外观模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解外观模式的动机,掌握该模式的结构;
2、能够利用外观模式解决实际问题。

[实验任务一]:计算机开启
在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法 ,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算机启动失败。
实验要求:
1.提交类图;
2.提交源代码;
3.注意编程规范。
image

import java.util.ArrayList;import java.util.List;
 public abstract class Component {
    protected String name;

    public Component(String name) {
        this.name = name;
    }

 
    public abstract boolean start();

    public String getName() {
        return name;
    }}
public class Memory extends Component {
    public Memory() {
        super("内存");
    }

    @Override
    public boolean start() {
        System.out.println(name + "开始自检...");
        // 模拟自检过程,此处默认成功,可修改为false模拟失败
        boolean success = true;
        if (success) {
            System.out.println(name + "自检成功");
            return true;
        } else {
            System.out.println(name + "自检失败");
            return false;
        }
    }}
public class CPU extends Component {
    public CPU() {
        super("CPU");
    }

    @Override
    public boolean start() {
        System.out.println(name + "开始运行...");
        // 模拟CPU启动过程
        boolean success = true;
        if (success) {
            System.out.println(name + "运行正常");
            return true;
        } else {
            System.out.println(name + "启动失败");
            return false;
        }
    }}
public class HardDisk extends Component {
    public HardDisk() {
        super("硬盘");
    }

    @Override
    public boolean start() {
        System.out.println(name + "开始读取...");
        // 模拟硬盘启动过程
        boolean success = true;
        if (success) {
            System.out.println(name + "读取成功");
            return true;
        } else {
            System.out.println(name + "读取失败");
            return false;
        }
    }}
public class OS extends Component {
    public OS() {
        super("操作系统");
    }

    @Override
    public boolean start() {
        System.out.println(name + "开始载入...");
        // 模拟操作系统启动过程
        boolean success = true;
        if (success) {
            System.out.println(name + "载入成功");
            return true;
        } else {
            System.out.println(name + "载入失败");
            return false;
        }
    }}
public class Mainframe {
    private List<Component> components;

    public Mainframe() {
        components = new ArrayList<>();
        // 初始化组件(按启动顺序添加)
        components.add(new Memory());
        components.add(new CPU());
        components.add(new HardDisk());
        components.add(new OS());
    }

  
    public boolean on() {
        System.out.println("按下开机按钮,计算机开始启动...");
        for (Component component : components) {
            if (!component.start()) {
                System.out.println("计算机启动失败:" + component.getName() + "启动异常");
                return false;
            }
        }
        System.out.println("所有组件启动完成,计算机启动成功!");
        return true;
    }}
public class MainframeTest {
    public static void main(String[] args) {
        Mainframe mainframe = new Mainframe();
        mainframe.on();

        // 若要测试失败场景,可修改任一Component的start()方法返回false
    }}
posted @ 2026-01-03 13:33  liu某人  阅读(0)  评论(0)    收藏  举报