首页 / JAVA / 装饰器模式(Java)
装饰器模式(Java)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了装饰器模式(Java),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1987字,纯文字阅读大概需要3分钟。
内容图文
![装饰器模式(Java)](/upload/InfoBanner/zyjiaocheng/613/c706fa3316a74c05a61ff9bf33f01c7c.jpg)
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
该设计模式是使用组合替代继承的具体实现。
使用装饰器模式
不修改图形绘制类的情况下增加绘制颜色的功能
/*
* 绘制图形
*/
interface Shape {
void draw();
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制长方形");
}
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆");
}
}
/*
* 绘制图形颜色
*/
class RedShape implements Shape {
private Shape shape;
public RedShape(Shape shape) {
this.shape = shape;
}
@Override
public void draw() {
this.shape.draw();
setRedBorder();
}
private void setRedBorder(){
System.out.println("使图形颜色为红色");
}
}
class YellowShape implements Shape {
private Shape shape;
public YellowShape(Shape shape) {
this.shape = shape;
}
@Override
public void draw() {
this.shape.draw();
setRedBorder();
}
private void setRedBorder(){
System.out.println("使图形颜色为黄色");
}
}
class ShapeTest {
public static void main(String[] args) {
Shape redCircle = new RedShape(new Circle());
Shape redRectangle = new RedShape(new Rectangle());
redCircle.draw();
redRectangle.draw();
System.out.println();
Shape yellowCircle = new YellowShape(new Circle());
Shape yellowRectangle = new YellowShape(new Rectangle());
yellowCircle.draw();
yellowRectangle.draw();
}
}
装饰器模式在Java IO类中的使用
//文件字节流读取类
InputStream in = new FileInputStream("./test.txt");
//在不修改FileInputStream的情况下,给FileInputStream增加缓存功能
InputStream bin = new BufferedInputStream(in);
//在不修改FileInputStream的情况下,让FileInputStream支持按照基本数据类型来读取数据,例如int, boolean, long等
InputStream din = new DataInputStream(in);
//还有其他的这里就不一一列举了。。。。
试想一下,如果不使用组合而是使用继承,有的子类增强一个功能,有的子类可能需要增强多个功能,这样的话就需要派生出很多子类,类的继承机构将会变得无比复杂,代码及不好扩展也不好维护。
总结
装饰器模式主要解决继承关系过于复杂得问题,通过组合代替继承。
内容总结
以上是互联网集市为您收集整理的装饰器模式(Java)全部内容,希望文章能够帮你解决装饰器模式(Java)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。