11.14每日总结

实验11:装饰模式

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

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

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

 

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

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

实验要求:

1.提交类图;

2.提交源代码;

3.注意编程规范。

 

 

 

public class JarPhone extends PhoneDecorator{

 

    public JarPhone(Phone p) {

        // TODO Auto-generated constructor stub

        super(p);

    }

    public void receiveCall() {

        super.receiveCall();

        System.out.println("接受来电,手机震动");

    }

 

}

 

public class PhoneDecorator extends Phone{

 

    private Phone phone;

    public PhoneDecorator(Phone p) {

        // TODO Auto-generated constructor stub

      if(p!=null) {

          phone=p;

      }else {

          phone=new SimplePhone();

      }

    }

    @Override

    public void receiveCall() {

        // TODO Auto-generated method stub

        phone.receiveCall();

    }

 

}public class SimplePhone extends Phone {

 

 

 

    @Override

    public void receiveCall() {

         // TODO Auto-generated method stub

             System.out.println("接受来电,电话响了");        

    }

 

}public class Client {

 

    public static void main(String[]args) {

        Phone p=new SimplePhone();

        p.receiveCall();

        System.out.println("Simple");

        Phone p1=new JarPhone(p);

        p1.receiveCall();

        System.out.println("JarPhone");

        Phone p2=new ComplexPhone(p1);

        p2.receiveCall();

        System.out.println("ComplexPhone");

    }

 

}#include<iostream>

#include<string>

using namespace std;

class Phone{

public:virtual void receiveCall()=0;

};

 

class SimplePhone :public Phone{

public:void receiveCall(){

    cout << "接受来电,电话响了" << endl;

}

};

 

class PhoneDecorator :public Phone{

private:Phone *pho;

public:PhoneDecorator(Phone *p){

    if (p != NULL){

        pho = p;

    }

    else{

        pho = new SimplePhone();

 

    }

}

       void receiveCall(){

           pho->receiveCall();

       }

};

class JarPhone:public PhoneDecorator{

private:Phone *p;

public: JarPhone(Phone *p):PhoneDecorator(p) {

        // TODO Auto-generated constructor stub

    this->p = p;

}

        void receiveCall(){

        p->receiveCall();

        cout<<"接受来电,手机震动"<<endl;

    }

 

};

class ComplexPhone :public PhoneDecorator{

private:Phone *p;

public: ComplexPhone(Phone *p) :PhoneDecorator(p) {

    // TODO Auto-generated constructor stub

    this->p = p;

}

        void receiveCall(){

            p->receiveCall();

            cout << "接受来电,灯光闪烁" << endl;

        }

 

};

int main(){

    Phone *p = new SimplePhone();

    p->receiveCall();

    cout<<"Simple"<<endl;

    Phone *p1 = new JarPhone(p);

    p1->receiveCall();

    cout<<"JarPhone"<<endl;

    Phone *p2 = new ComplexPhone(p1);

    p2->receiveCall();

    cout<<"ComplexPhone"<<endl;

}

posted @ 2023-11-14 16:31  ME社长  阅读(12)  评论(0)    收藏  举报