装饰模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈装饰模式及其应用

姓名:

班级:

2017年3月30日

摘要:

本文主要简述自己对装束模式的理解以及应用。装饰模式主要包括四个角色,抽象对象类定义对象接口,可以给这些对象动态添加方法;具体对象类定义了具体的对象,实现了抽象对象类中的方法,装饰器可以给它增加额外的方法;抽象装饰类是抽象对象类的子类,用于给具体的对象增加职责,但是具体职责在其子类中实现;具体装饰类是抽象装饰类的子类,负责向对象添加新的方法。装饰模式主要利用继承的方式实现但又比继承更加灵活。

关键词:装饰模式抽象对象类具体对象类抽象装饰类具体装饰件类继承

目录

1 装饰模式定义 (4)

2 装饰模式结构与分析 (4)

2.1 模式结构 (4)

3 实例与解析 (5)

3.1 装饰模式实例之手机功能查询 (5)

3.1.1 实例说明 (5)

3.1.2 实例类图 (5)

3.1.3 实例代码及解释 (5)

3.1.4 辅助代码 (9)

3.1.5运行结果展示 (12)

4 模式优缺点 (15)

5 总结 (16)

1 装饰模式定义

装饰模式是动态的给一个对象增加一些额外的职责,就像是在墙上刷油漆就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式通常通过继承来实现功能的拓展。

2 装饰模式结构与分析

2.1 模式结构

装饰模式结构图

1 抽象对象类

类中定义了对象的接口,可以给这些对象动态的增加方法,抽象对象类是具体对象和抽象装饰类的共同父类,它类有具体对象对象类需要实现的方法。

2 具体对象类

定义了具体的构件对象,实现了在抽象对象类中定义的抽象方法,它也是装饰类装饰的具体对象。

3 抽象装饰类

继承于抽象构件,用于给具体对象增加方法,但是具体的方法是在它

的子类中实现的,抽象装饰类中定义了其子类需要具体实现的方法。

4 具体装饰件类

具体装饰类是抽象装饰类的子类,负责向构件添加新的职责,每一个具体装饰类都有自己具体的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法以便扩充对象的行为。

3 实例与解析

3.1 装饰模式实例之手机功能查询

3.1.1 实例说明

简单的手机在接收到来电耳朵时候,会发出声音提醒,手机功能升级后还可以发出震动,高级手机来电时不仅可以发出声音提醒,震动提醒,还可以灯光闪烁提示。

3.1.2 实例类图

3.1.3 实例代码及解释

(1)抽象对象类Phone

类中定义两个方法一个是抽象方法用来获取手机名称的,一个是用来获取功能

(2)具体对象类SimplePhone

实例化对象简单手机继承phone实现父类中的抽象方法;构造方法用来传参。

(3)具体对象类ComplexPhone

实例化对象高级手机继承phone实现父类中的抽象方法;构造方法用来传参。

(4)抽象装饰类Decorator

抽象装饰类继承phone类,含有抽象方法获取功能。

(5)具体装饰件voice

具体装饰件声音提醒,继承抽象装饰类,构造方法用来传参,定义父类中的两个方法用来给装饰对象附加功能。

(6)具体装饰件shake

具体装饰件震动提醒,继承抽象装饰类,构造方法用来传参,定义父类中的两个方法用来给装饰对象附加功能。

(7)具体装饰件lamp

具体装饰件声音提醒,继承抽象装饰类,构造方法用来传参,定义父类中的两个方法用来给装饰对象附加功能。

3.1.4 辅助代码

(1)框架类

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener{

String s1,s2;

JPanel jp1,jp2;

JComboBox jcb;

JButton jb;

JTextArea ta;

JLabel lb;

public MyFrame(){

//创建对象

jp1=new JPanel();

jp2=new JPanel();

jcb=new JComboBox();

jcb.addItem("简单手机");

jcb.addItem("升级版简单手机");

jcb.addItem("高级手机");

jb=new JButton("查询");

ta=new JTextArea();

lb=new JLabel("手机版本:");

jb.addActionListener(this);

//jcb.addActionListener(this);

//添加面板设置布局

jp1.setLayout(new GridLayout(2,1,10,10));

jp2.setLayout(new GridLayout(1,3,10,100));

jp2.add(lb);

jp2.add(jcb);

jp2.add(jb);

jp1.add(jp2);

jp1.add(ta);

this.setContentPane(jp1);

setTitle("手机功能查询");

setSize(300,300);

setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String value=jcb.getSelectedItem().toString();

Test t1=new Test(value);

}

相关文档
最新文档