设计模式练习(9)——装饰模式
·
装饰模式
一、题目:
简单的手机(SimplePhone)在接收到来电的时候,会发出声音来提醒主人,而现在我们需要为该手机添加一项功能,在接收来电的时候,除了有声音,还能产生震动(JarPhone),还可以得到更加高级的手机(ComplexPhone),来电时,它不仅能够发生,产生震动,而且有灯光闪烁提示,使用装饰模式来模拟手机功能的升级过程,要求绘制类图形编程模拟实现。
(1)给出装饰模式等结构视图
(2)给出该实例等类图及代码实现
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
抽象手机构件类:抽象构件类
package DecoratorPattern;
/**
* 抽象手机构件类:抽象构件类
* @author gong
*
*/
abstract class Gj19CellPhone {
public abstract void receiveCall();
}
简单手机类:具体构件类
package DecoratorPattern;
/**
* 简单手机类:具体构件类
* @author gong
*
*/
public class Gj19SimplePhone extends Gj19CellPhone{
@Override
public void receiveCall() {
System.out.println("声音提示");
}
}
构件装饰类:抽象装饰类
package DecoratorPattern;
/**
* 构件装饰类:抽象装饰类
* @author gong
*
*/
public class Gj19PhoneDecorator extends Gj19CellPhone{
private Gj19CellPhone phone=null;
public Gj19PhoneDecorator(Gj19CellPhone phone) {
if(phone!=null){
this.phone = phone;
}else{
this.phone = new Gj19SimplePhone();
}
}
@Override
public void receiveCall() {
phone.receiveCall();
}
}
Jar手机类:具体装饰类
package DecoratorPattern;
/**
* Jar手机类:具体装饰类
* @author gong
*
*/
public class Gj19JarPhone extends Gj19PhoneDecorator{
public Gj19JarPhone(Gj19CellPhone phone) {
super(phone);
}
public void receiveCall() {
super.receiveCall();
System.out.println("震动提示");
}
}
Complex手机类:具体装饰类
package DecoratorPattern;
/**
* Complex手机类:具体装饰类
* @author gong
*
*/
public class Gj19ComplexPhone extends Gj19PhoneDecorator{
public Gj19ComplexPhone(Gj19CellPhone phone) {
super(phone);
}
public void receiveCall() {
super.receiveCall();
System.out.println("灯光闪烁提示");
}
}
客户端测试类
package DecoratorPattern;
/**
* 客户端测试类
* @author gong
*
*/
public class Gj19client {
public static void main(String a[]){
Gj19CellPhone p1 = new Gj19SimplePhone();
p1.receiveCall();
System.out.println();
Gj19CellPhone p2 = new Gj19JarPhone(p1);
p2.receiveCall();
System.out.println();
Gj19CellPhone p3 = new Gj19ComplexPhone(p2);
p3.receiveCall();
}
}
五、运行结果:
更多推荐


所有评论(0)