设计模式总结之装饰者模式
2016-05-10 21:06
405 查看
装饰者模式,角色主要由装饰者和被装饰者组成。装饰者模式的设计原则就是多用组合少用继承合开闭原则。其动态的将职责添加到对象身上,如果需要扩展,则提供了比继承更加灵活的实现方式。装饰者有如下特点:1.装饰者和被装饰者有相同父类。2.可以用一个或多个装饰者装饰被装饰者。3.被装饰者可以在自己行为之前或之后添加装饰者的行为。4.对象可以在任何时候被装饰,且动态装饰。5.装饰模式使用的继承不是为了拓展,而是为了与更好的匹配类型。
Java中我们常见的Io类也是用的装饰者模式。
装饰者模式的类图如下:
可以举一个例子,比如一个游戏开发程序员,目前只会开发游戏,以后要给他拓展一些技能,就可以选择装饰者模式。package com.java.decorator;
public interface Component {
void doOperation();
}
Java中我们常见的Io类也是用的装饰者模式。
装饰者模式的类图如下:
可以举一个例子,比如一个游戏开发程序员,目前只会开发游戏,以后要给他拓展一些技能,就可以选择装饰者模式。package com.java.decorator;
public interface Component {
void doOperation();
}
package com.java.decorator; public class Decorator implements Component{ private Component component; public Decorator(Component component) { this.component = component; } @Override public void doOperation() { component.doOperation(); } }
package com.java.decorator; public class ConcreteCompontent implements Component{ @Override public void doOperation() { System.out.println("我是被装饰者,我会做游戏"); } }
package com.java.decorator; public class BackGroundDecorator extends Decorator{ public BackGroundDecorator(Component component) { super(component); } @Override public void doOperation() { super.doOperation(); System.out.println("可以给你添加后台技能哦"); } }
package com.java.decorator; public class OperationDecorator extends Decorator{ public OperationDecorator(Component component) { super(component); } @Override public void doOperation() { super.doOperation(); System.out.println("可以给你添加运营技能"); } }
package com.java.decorator; public class Test { public static void main(String[] args) { Object object = new Object(); Object b = object; System.out.println(object.hashCode()); System.out.println(b.hashCode()); ConcreteCompontent compontent = new ConcreteCompontent(); BackGroundDecorator backGroundDecorator = new BackGroundDecorator(compontent); backGroundDecorator.doOperation(); OperationDecorator decorator = new OperationDecorator(backGroundDecorator); decorator.doOperation(); } }
相关文章推荐
- 新人刚刚注册
- 数据库实验一
- DUBBO配置规则详解
- 图像特效---旋转模糊滤镜
- jQuery -- 下载与引入到文件
- BZOJ 3011 Running Away From the Barn
- java内存管理总结
- java版实时获取access_token
- python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典
- Surrounded Regions
- HUSTOJ 1017:三个整数是否相邻
- GitHub入门学习
- addFieldError与addActionError的区别
- Android 面试题汇总
- C语言 打印1到最大的N位数(输入3,打印1,2,3~999)
- x -path
- 查找
- mysql查询学习第一天,针对scott
- 感知哈希算法--python实现
- 关于有偿提供拼图响应式后台的通知