欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

装饰者设计模式,简单代码实现

发布时间:2025/3/20 asp.net 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 装饰者设计模式,简单代码实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.


/**装饰者模式* 装饰者模式就是使用被装饰类的一个子类的实例,在客户端将* 这个子类的实例交给装饰类。是集成的替代方案* 优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象* 的功能,并且可以随意地组合这些功能。* 缺点:正因为可以随意组合,所以就可能出现一些不合理地逻辑*///首先创建手机类接口 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);} }

总结

以上是生活随笔为你收集整理的装饰者设计模式,简单代码实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。