装饰模式

一、题目:

简单的手机(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();
    }

}

五、运行结果:

这里写图片描述

更多推荐