美文网首页
装饰模式

装饰模式

作者: 爱我O就直说 | 来源:发表于2020-01-07 15:01 被阅读0次

2020-01-07

先看效果:


//装饰模式 测试

private void decorateTest() {
        System.out.println("——————————————————————————");
        //爱疯手机        
        Phone phone = new IPhone();
        phone.call();
        System.out.println("——————————————————————————");
        //彩铃手机
        Phone ringPhone = new RingPhoneDecorate(phone);
        ringPhone.call();
        System.out.println("——————————————————————————");
        //音乐手机
        Phone musicPhone = new MusicPhoneDecorate(phone);
        musicPhone.call();
        System.out.println("——————————————————————————");
        //又有彩铃,又有音乐的手机
        Phone ringMusicPhone = new MusicPhoneDecorate(ringPhone);
        ringMusicPhone.call();
        System.out.println("——————————————————————————");
}


###输出结果:

——————————————————————————
爱疯打电话
——————————————————————————
彩铃响起
爱疯打电话
——————————————————————————
爱疯打电话
音乐响起
——————————————————————————
彩铃响起
爱疯打电话
音乐响起
——————————————————————————

开始写:

image
/**
 * 手机接口
 */
public interface Phone {
    void call();
}
/**
 * 爱疯手机
 */
public class IPhone implements Phone {

    @Override
    public void call() { //基础功能:打电话
        System.out.println("爱疯打电话");
    }
}
到此,已有手机类,下面给手机定义装饰类

抽象装饰类:

/**
 * 手机装饰类
 */
abstract class PhoneDecorate implements Phone {
    private Phone phone;

    /**
     * 给手机装饰,所以要传手机
     *
     * @param phone 被装饰的手机
     */
    public PhoneDecorate(Phone phone) {
        this.phone = phone;
    }

    @Override
    public void call() {
        this.phone.call();
    }
}

具体装饰类:

/**
 * 彩铃装饰
 */
public class RingPhoneDecorate extends PhoneDecorate {
    /**
     * 给手机装饰,所以要传手机
     *
     * @param phone 被装饰的手机
     */
    public RingPhoneDecorate(Phone phone) {
        super(phone);
    }

    @Override
    public void call() {
        System.out.println("彩铃响起");
        super.call();
    }
}
/**
 * 音乐装饰
 */
public class MusicPhoneDecorate extends PhoneDecorate {
    /**
     * 给手机装饰,所以要传手机
     *
     * @param phone 被装饰的手机
     */
    public MusicPhoneDecorate(Phone phone) {
        super(phone);
    }

    @Override
    public void call() {
        super.call();
        System.out.println("音乐响起");
    }
}

完事儿

相关文章

网友评论

      本文标题:装饰模式

      本文链接:https://www.haomeiwen.com/subject/qviractx.html