生活随笔
收集整理的这篇文章主要介绍了
装饰者设计模式,简单代码实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
/**装饰者模式* 装饰者模式就是使用被装饰类的一个子类的实例,在客户端将* 这个子类的实例交给装饰类。是集成的替代方案* 优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象* 的功能,并且可以随意地组合这些功能。* 缺点:正因为可以随意组合,所以就可能出现一些不合理地逻辑*///首先创建手机类接口
package july.star.decorate;
/*** Phone* 创建手机类接口* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午8:59:36* @version 1.0*/
public interface Phone {//每个手机都有打电话的功能public void call();
}//实现其接口
package july.star.decorate;/*** IPhone* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:01:17* @version 1.0*/
public class IPhone implements Phone{@Overridepublic void call() {System.out.println("手机可以打电话了!");}
}//创建抽象的手机抽象类
package july.star.decorate;
/*** PhoneDecotate* 创建抽象的手机装饰类* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:03:29* @version 1.0*/
public abstract class PhoneDecorate implements Phone{private Phone p;public PhoneDecorate(Phone p){this.p = p;}@Overridepublic void call() {p.call();}
}//给手机装饰彩铃功能
package july.star.decorate;/*** RingPhoneDecorate* 给手机装饰彩铃功能* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:26:02* @version 1.0*/
public class RingPhoneDecorate extends PhoneDecorate{public RingPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {System.out.println("手机可以听彩铃");super.call();}
}//给手机添加播放视频功能
package july.star.decorate;/*** MusicPhoneDecorate* 给手机添加播放视频功能* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:29:04* @version 1.0*/
public class PlayPhoneDecorate extends PhoneDecorate{public PlayPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {super.call();System.out.println("手机可以播放视频了");}
}//测试
package july.star.decorate;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
/*** PhoneDemo* 装饰者模式* 装饰者模式就是使用被装饰类的一个子类的实例,在客户端将* 这个子类的实例交给装饰类。是集成的替代方案* 优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象* 的功能,并且可以随意地组合这些功能。* 缺点:正因为可以随意组合,所以就可能出现一些不合理地逻辑* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:06:30* @version 1.0*/
public class PhoneDemo {public static void main(String[] args) {Phone p = new IPhone();p.call();System.out.println("-----------------------");// 打电话前听彩铃// 给手机添加彩铃功能RingPhoneDecorate rpd = new RingPhoneDecorate(p);rpd.call();System.out.println("-----------------------");// 打完电话后看视频// 给手机添加播放视频PlayPhoneDecorate pd = new PlayPhoneDecorate(p);pd.call();System.out.println("-----------------------");// 打电话前听彩铃,打完电话后播放视频RingPhoneDecorate r = new RingPhoneDecorate(new PlayPhoneDecorate(p));r.call();System.out.println("-----------------------");// 类似的IO流也是装饰者模式设计InputStream is = System.in; // 字节流// 包装InputStreamReader isr = new InputStreamReader(is); // 字符流,单读取一个// 再包装BufferedReader bis = new BufferedReader(isr);// 可以用一行来表示// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//又或者是控制台录入//Scanner sc = new Scanner(System.in);}
}
总结
以上是生活随笔为你收集整理的装饰者设计模式,简单代码实现的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。