设计模式之装饰者模式

来源:互联网 发布:网络词碰瓷是什么意思 编辑:程序博客网 时间:2024/05/22 14:21

装饰者模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,他是对原有功能的扩充,在IO流中这个设计模式用的特别多。现在总结下装饰者模式。

例如:手机具有打电话的功能,现在我需要在打电话之前听音乐铃声,打完之后看天气预报,在这里例子中就可以用到装饰者模式进行设计。

1、定义一个手机的抽象类

public interface Phone {public abstract void call() ;// 打电话}

2、定义一个具体的手机类,它也具有打电话的功能

public class IPhone implements Phone {@Overridepublic void call() {System.out.println("打电话...................");}}

3、定义一个装饰的公共类,父类

public class PhoneDecorate implements Phone {private Phone phone ;public PhoneDecorate(Phone phone) {this.phone = phone ;}@Overridepublic void call() {phone.call() ;}}

4、定义一个听音乐的装饰类

public class ListenMusicDecorat extends PhoneDecorate {public ListenMusicDecorat(Phone phone) {super(phone);} @Overridepublic void call() {System.out.println("听音乐.............");super.call() ;}}

5、定义一个看天气预报的装饰类

public ListenWeatherForecastDecorat(Phone phone) {     super(phone);    }@Overridepublic void call() {super.call();System.out.println("听天气预报................");}}

6、装饰者模式的实现类

public class DecoratDemo {public static void main(String[] args) {// 创建IPhone的对象IPhone iPhone = new IPhone() ;iPhone.call() ;System.out.println("-------------------------------------------------");ListenMusicDecorat listenMusicDecorat = new ListenMusicDecorat(iPhone) ;listenMusicDecorat.call() ;//听音乐,打电话System.out.println("-------------------------------------------------");ListenWeatherForecastDecorat listenWeatherForecastDecorat = new ListenWeatherForecastDecorat(iPhone) ;listenWeatherForecastDecorat.call() ;//打电话,看预报System.out.println("-------------------------------------------------");ListenMusicDecorat decorat = new ListenMusicDecorat(new ListenWeatherForecastDecorat(new IPhone())) ;decorat.call() ;//听音乐,打电话,看预报}}

上面的包装类似于:

Scanner sc = new Scanner(System.in);//包装一次

BufferedReader reader = new BufferedReader (new BufferInputStream(new FileInputStream());两次包装。


0 0
原创粉丝点击