作为一个Java小白,面向对象编程的几个特性:封装\继承\多态,我一直真正了解的不多.这个模式却让我一下理解了多态的好处:它可以很方便的对系统进行解耦.废话不讲,上代码和注释
1.公共接口
public interface Appearance{
void draw();
}
2.基本实现类和一个用作装饰别的Appearance子类的抽象类
//这里列出来两个基本实现类
public class Circle implements Appearance{
@override
public void draw(){
System.out.println("画个圆形");
}
}
public class Rectangle implements Appearance{
@override
public void draw(){
System.out.println("画个矩形");
}
//一个装饰Appearance子类的抽象类
public abstract class AppearanceDecorator implements Appearance{
//声明为proteced可以被子类继承
protected Appearance decoratedAppearance;
public AppearanceDecorator(Appearance decoratedAppearance){
this.decoratedAppearance = decoratedrAppearance;
}
@override
public void draw(){
decoratedAppearance.draw();
}
}
3.装饰的具体实现类
public class RedAppearanceDecorator extends AppearanceDecorator{
public RedAppearanceDecorator(Appearance decoratedAppearance){
super(decoratedAppearance);
}
private void setRedBorder(){
System.out.println("进行镶边");
System.out.println("done!红色镶边");
}
@override
public void draw(){
decoratedAppearance.draw();
setRedBorder();
}
}
接下来:用测试类来测试一下即可:
public class Test{
public static void(String[] args){
Appearance circle = new Circle();
circle.draw();
Appearance rectangle = new Rectangle();
rectangle.draw();
Appearance redCircle = new RedAppearanceDecorator( new Circle() );
redCircle.draw();
}
}
最后,简单一提,学习设计模式一方面是要加深对java体系的理解,另一方面也是增长自己的设计能力.
在Java的io操作中,
BufferedWirter \ OutputStreamWriter 是Writer的子类
其中BufferedWriter就是具体的装饰类.以后,会结合具体的Java或者Andoid源代码进行讲解.
源代码我现在阅读起来还有些费力气,但是最起码要有读源代码的意识,这是开发者必备的技能.