首页 > 编程语言 >装饰模式java+c++

装饰模式java+c++

时间:2022-11-24 21:45:04浏览次数:42  
标签:java JarPhone phone c++ public Phone call 装饰 SimplePhone

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

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

 

 

 

 

package test11;

public class Client {

    public static void main(String[]args) {
        Phone p=new SimplePhone();
        p.call();
        System.out.println("Simple");
        JarPhone p1=new JarPhone(p);
        p1.shoke();
        System.out.println("JarPhone");
        ComplexPhone p2=new ComplexPhone(p1);
        p2.light();
        System.out.println("ComplexPhone");
    }

}
package test11;

public class ComplexPhone extends UpgradePhone{
    public ComplexPhone(Phone phone){
        super(phone);
        System.out.println("***增加闪光功能***");
    }
    public void light(){
        System.out.println("灯光闪烁:咔嚓");
    }
}
package test11;

public class JarPhone extends UpgradePhone{
    public JarPhone(Phone phone){
        super(phone);
        System.out.println("***增加振动的功能***");
    }
    public void shoke(){
        System.out.println("振动:嗡嗡嗡");
    }
}
package test11;

public interface Phone {
    public void call();


}
package test11;

public class SimplePhone implements Phone{
    public SimplePhone(){
        System.out.println("手机收到来电");
    }
    public void call(){
        System.out.println("主人来电话啦!");
    }
}
package test11;

public class UpgradePhone implements Phone{
    private Phone phone;
    public UpgradePhone(Phone a){
        phone=a;
    }
    public void call(){
        phone.call();
    }
}

 

 

#include <iostream>
#include <string>
#include <list>
using namespace std;
//抽象构建——Phone类
class Phone
{
public:
    Phone() {}
    virtual ~Phone() {}
    virtual void call() {}
};
//具体构建——SimplePhone
class SimplePhone : public Phone
{
private:
    string name;
public:
    SimplePhone(string name) : name(name) {}
    ~SimplePhone() {}
    void call() {
        cout <<"--------------" <<name << "------------------" << endl;
        cout<<"响铃:主人来电话啦!"<<endl;
    }
};
//抽象装饰类——UpgradePhone
class UpgradePhone : public Phone
{
private:
    Phone* phone;
public:
    UpgradePhone(Phone* phone) : phone(phone) {}
    virtual void call() {
        phone->call();
    }
};
//具体装饰类——JarPhone
class JarPhone : public UpgradePhone
{
public:
    JarPhone(Phone* phone) : UpgradePhone(phone) {}
    void call() {
        UpgradePhone::call();
        shoke();
    }
private:
    void shoke() {
        cout << "振动:嗡嗡嗡" << endl;
    }
};
//具体装饰类—— ComplexPhone
class ComplexPhone : public UpgradePhone
{
public:
    ComplexPhone(Phone* phone) : UpgradePhone(phone) {}
    void call() {
        UpgradePhone::call();
        light();
    }
private:
    void light() {
        cout << "闪光:咔嚓" << endl;
    }
};

int main()
{
    Phone* phone = new SimplePhone("SimplePhone");
    phone->call();

    Phone* jphone = new SimplePhone("JarPhone");
    Phone* ph1 = new JarPhone(jphone);
    ph1->call();

    Phone* cphone = new SimplePhone("ComplexPhone");
    Phone* ph2 = new JarPhone(cphone);
    Phone* ph3 = new ComplexPhone(ph2);
    ph3->call();

    delete phone;
    delete jphone;
    delete ph1;
    delete ph2;
    delete ph3;
    delete cphone;

}

 

标签:java,JarPhone,phone,c++,public,Phone,call,装饰,SimplePhone
From: https://www.cnblogs.com/rongzhang/p/16923548.html

相关文章

  • 适配器模式c++
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。  #include<iostream>usingnamespacestd;classCat{public:virtualvoid......
  • java集合对List进行排序
    List排序4种写法方式1:JAVA中我们可以使用java.util.Collections类的sort(Listlist)方法对list集合中的元素排序。方式2:JDK8之后特别是lambda表达式的盛行,而且Collec......
  • Java访问控制符
    Java访问控制符Java访问控制符修饰的对象可以分为两类:class和member(包括method和field)一.修饰classpublic:该类对所有类可见。default(不加修饰符):该类对同一个包下的......
  • Java 应用4核8G性能瓶颈分析步骤
     服务器性能瓶颈表现:CPU使用率达到了百分百什么原因会导致服务器CPU使用率达到百分百1、磁盘IO2、网络IO3、远程接口执行速度以上原因会导致服务响应变慢,为什么慢......
  • Java学习五
    一.小结1.程序模块化和可重用性是软件工程的中心目标之一。java提供了很多有助于完成这一目标的有效结构。方法就是一个这样的结构。2.方法指定方法的修饰符,返回值类型,方......
  • Java 设计模式:工厂模式
    目录工厂模式(FactoryPattern)实现简单工厂模式示例工厂方法模式示例抽象工厂模式示例参考工厂模式(FactoryPattern)所属:创建型模式,适用时机:我们明确地计划不同条件下创建......
  • 2022年度GitHub中文Java项目排行榜Top 10
    1.mall项目地址:https://github.com/macrozheng/mallmall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商......
  • Java反射机制
    反射特征:动态性编译时候确定不了哪个类的对象比如:后台已经在运行了,但还没有收到前端的请求,这时候,后台收到请求时,使用的是反射机制调用对象反射机制与面向对象的矛盾:不......
  • 洛谷P1090 Java
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的......
  • Java之微信支付(扫码支付模式二)案例实战-之支付完成后页面跳转方案
    摘要:做过微信扫码支付的同学都知道,微信扫码支付完成后,要跳转到指定的页面就比较麻烦了,这里我提供一种比较可行的方案,也许还有其他更多的方案,但是我这里分享下我们当时是怎么......