Decorator------设计模式
来源:互联网 发布:淘宝的信誉评级怎么看 编辑:程序博客网 时间:2024/06/18 14:15
1.装饰模式---对装饰与内容一视同仁
2.java中的 FileInputStream BufferedInputStream DataInputStream 是典型的装饰模式的应用。
比如下面的代码:
FileOutputStream fos = new FileOutputStream("1.txt");BufferedOutputStream bos = new BufferedOutputStream(fos);DataOutputStream dos = new DataOutputStream(bos);byte b = 3;int i = 78;char ch = 'a';float f = 2.3f;double d = 2.445534;dos.writeByte(b);dos.writeInt(i);dos.writeChar(ch);dos.writeFloat(f);dos.writeDouble(d);dos.close();FileInputStream fis = new FileInputStream("1.txt");BufferedInputStream bis = new BufferedInputStream(fis);DataInputStream dis = new DataInputStream(bis);System.out.println(dis.readByte());System.out.println(dis.readInt());System.out.println(dis.readChar());System.out.println(dis.readFloat());System.out.println(dis.readDouble());dis.close();
装饰的含义就是在最开始的个体上不断地添加新的装饰物体,最后成为我们想要的东西。
2.示例:
package com.cn;abstract class Display {public abstract int getColumns();public abstract int getRows();public abstract String getRowText(int row);public final void show() {for (int i = 0; i < getRows(); i++) {System.out.println(getRowText(i));}}}class StringDisplay extends Display {private String string;public StringDisplay(String string) {this.string = string;}public int getColumns() {return string.getBytes().length;}public int getRows() {return 1;}public String getRowText(int row) {if (row == 0) {return string;}else {return null;}}}abstract class Border extends Display {protected Display display;protected Border(Display display) {this.display = display;}}class SideBorder extends Border {private char borderChar;public SideBorder(Display display, char ch) {super(display);this.borderChar = ch;}public int getColumns() {return 1 + display.getColumns() + 1;}public int getRows() {return display.getRows();}public String getRowText(int row) {return borderChar + display.getRowText(row) + borderChar;}}class FullBorder extends Border {public FullBorder(Display display) {super(display);} public int getColumns() {return 1 + display.getColumns() + 1;}public int getRows() {return 1 + display.getRows() + 1;}public String getRowText(int row) {if(row == 0) {return "+" + makeLine('-',display.getColumns()) + "+";}else if (row == display.getRows() + 1) {return "+" + makeLine('-',display.getColumns()) + "+";}else {return "|" + display.getRowText(row - 1) + "|";}}private String makeLine(char ch, int count) {StringBuffer buf = new StringBuffer();for(int i = 0; i < count; i++) {buf.append(ch);}return buf.toString();}}public class Decorator {public static void main(String[] args) {/*Display b1 = new StringDisplay("Hello,world.");Display b2 = new SideBorder(b1,'#');Display b3 = new FullBorder(b2);b1.show();b2.show();b3.show();*/Display b4 = new SideBorder(new FullBorder(new FullBorder(new SideBorder(new FullBorder(new StringDisplay("你好。")),'*'))),'/');b4.show();}}
3.另外一个示例(展现此模式的魅力)
package com.cn;abstract class Display2 {public abstract int getColumns();public abstract int getRows();public abstract String getRowText(int row);public void show() {for(int i = 0; i < getRows(); i++) {System.out.println(getRowText(i));}}}class StringDisplay2 extends Display2 {private String string;public StringDisplay2(String string) {this.string = string;}public int getColumns() {return string.getBytes().length;}public int getRows() {return 1;}public String getRowText(int row) {if(row == 0) {return string;}else {return null;}}}abstract class Boder extends Display2 {protected Display2 display;protected Boder(Display2 display) {this.display = display;}}class FullBoder extends Boder {char ch;public FullBoder(Display2 display, char ch) {super(display);this.ch = ch;}public int getColumns() {return 1 + display.getColumns() + 1;}public int getRows() {return 1 + display.getRows() + 1;}public String getRowText(int row) {if(row == 0 || row == getRows()-1) {return print();}else {return ch + display.getRowText(row - 1) + ch;}}private String print() {StringBuffer sb = new StringBuffer();for(int i = 0; i < getColumns(); i++) {sb.append(ch);}return sb.toString();}}public class Main {public static void main(String[] args) {StringDisplay2 sd = new StringDisplay2("+");FullBoder fb = new FullBoder(sd,'-');FullBoder fb2 = new FullBoder(fb,'+');fb2.show();}}
装饰模式有一点嵌套循环的意思。
- 设计模式 - Decorator模式
- 设计模式-decorator模式
- 设计模式-Decorator模式
- 设计模式 - Decorator模式
- 设计模式--Decorator 模式
- java Decorator设计模式 Decorator设计模式
- SharpDevelop设计模式(Decorator)
- 设计模式之Decorator
- Decorator设计模式 C#
- Decorator设计模式 Java
- 设计模式--Decorator
- 设计模式之 Decorator
- 设计模式(Decorator)
- 设计模式之Decorator
- 设计模式之Decorator
- 设计模式之Decorator
- 设计模式之 decorator
- Java.Decorator设计模式
- QQTab切换特效
- CSS Float
- sql 语法 cast 不太清楚 还有ibatis语法
- 编程高手成长的六个阶段(梁肇新《编程高手箴言》)
- 在用户空间发生中断时,上下文切换的过程
- Decorator------设计模式
- 开始python 之旅
- 使用GridView和ActivityGroup实现tab切换
- 提高性能的方法
- MyEclipse8.5反编译方法
- 二元一次方程的解和二元一次方程组的解之间的联系的道理
- Linux内核模块开发
- 自定义jQuery插件
- SVN使用教程之-分支/标记 合并 subeclipse