0-前言
装饰模式定义:动态给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
1-实现
1-1、易看的UML图:
1-2、代码实现:
//1、演员类(component,直接实现,未抽取父类,可抽取父类)class Actor{ public void Act() { System.out.println("演员开始表演了"); }}//2、Decorator(装饰抽象类)class Stylist extends Actor{ protected Actor actor; public void MakeActor(Actor _actor) { this.actor = _actor; } @Override public void Act() { if (actor !=null) { actor.Act(); } }}//2-1、ConcreteComponentA(具体装饰者A--古装造型师)class AncientStylist extends Stylist{ private String State; @Override public void Act() { System.out.println("古装造型师给演员化妆了"); State = "演员状态挺好的"; System.out.println(State); super.Act(); }}//2-2、ConcreteComponentB(具体装饰者B)class ModernStylist extends Stylist{ public void AddBehaver() { System.out.println("给演员打了个气"); } @Override public void Act() { System.out.println("现代造型师给演员化妆了"); AddBehaver(); super.Act(); }
客户端:
Actor actor = new Actor(); AncientStylist ancientStylist =new AncientStylist(); ModernStylist modernStylist = new ModernStylist(); ancientStylist.MakeActor(actor); ancientStylist.Act(); modernStylist.MakeActor(actor); modernStylist.Act();
运行结果:
2、应用场景简单总结
1、当需要以不影响其他对象为前提实现动态、透明地给单个对象添加职责时;
2、当需要将对象的某些职责进行撤销操作时;
3、当不能用生成子类的方法进行当前系统的扩充时;
无废话设计模式(7)结构型模式店铺运营活动、 产品线规划、 大森林、 跨境知道每周资源分享!资源干货包(实用模板+提升排名技巧+欧洲引流渠道)、 Shopify+Facebook广告教程、 亚马逊内测APP弹窗功能"劫持"用户,第三方卖家凉凉?、 2017年端午节去深圳西冲玩怎么样?去西冲玩什么?、 2017年深圳世界之窗国际啤酒节是什么时候?、 2017深圳端午节哪里有赛龙舟看?、
No comments:
Post a Comment