【Java】【設計模式 Design Pattern】裝飾器模式 Decorator
阿新 • • 發佈:2020-07-29
package cn.echo42.decorator; /** * @author DaiZhiZhou * @file Netty * @create 2020-07-29 16:49 */ public class Client { public static void main(String[] args) { Phone huaweiP30 = new Huawei(); huaweiP30.function(); System.out.println(huaweiP30.price()); huaweiP30= new MediaPlayerPhoneDecorator(huaweiP30); huaweiP30.function(); System.out.println(huaweiP30.price()); huaweiP30 = new ShotPhoneDecorator(huaweiP30); huaweiP30.function(); System.out.println(huaweiP30.price()); // 單件購買也可以 Phone phone = new MediaPlayerPhoneDecorator(); System.out.println(phone); }interface Phone { int price(); void function(); } static class Huawei implements Phone { @Override public int price() { return 1000; } @Override public void function() { System.out.println("華為手機的基礎功能"); } }interface PhoneDecorator extends Phone{ } static class MediaPlayerPhoneDecorator implements PhoneDecorator { private Phone phone; public MediaPlayerPhoneDecorator() { } public MediaPlayerPhoneDecorator(Phone phone) { this.phone = phone; } public void setPhone(Phone phone) { this.phone = phone; } @Override public int price() { return 200 + this.phone.price(); } @Override public void function() { phone.function(); System.out.println("增強了MP3播放功能"); } } static class ShotPhoneDecorator implements PhoneDecorator { private Phone phone; public ShotPhoneDecorator(Phone phone) { this.phone = phone; } public ShotPhoneDecorator() { } public void setPhone(Phone phone) { this.phone = phone; } @Override public int price() { return this.phone.price(); } @Override public void function() { phone.function(); System.out.println("增強了拍攝功能"); } } }
測試結果:
華為手機的基礎功能 1000 華為手機的基礎功能 增強了MP3播放功能 1200 華為手機的基礎功能 增強了MP3播放功能 增強了拍攝功能 1200 cn.echo42.decorator.Client$MediaPlayerPhoneDecorator@677327b6 Process finished with exit code 0