装饰模式:(继承过来,重写方法的时候调用原有方法和添加自己的装饰方法或代码)
好处就是把类的核心功能和装饰功能分开,而且如果想要再添加装饰功能不需要反反复复的的修改原来的类
abstract class Component{
public abstract void Operation();
}
class ConcreteComponent extends Component{
public void Operation(){
System.out.println("具体对象的操作");
}
}
abstract class Decorator extends Component{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public void Operation(){
if(component != null){
component.Operation();
}
}
}
class ConcreteDecoratorA extends Decorator{
private string addedState;
public void Operation(){
super.Operation();
addedState = "New State";
System.out.println("具体装饰对象A的操作");
}
}
class ConcreteDecoratorB extends Decorator{
public void Operation(){
super.Operation();
AddedBehavior();
System.out.println("具体装饰对象B的操作");
}
private void AddedBehavior(){
}
}
public test{
public static void main(String args[]){
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
}
}
最后的输出应该是
具体对象的操作
具体装饰对象A的操作
具体装饰对象B的操作