zoukankan      html  css  js  c++  java
  • 设计模式之装饰模式

    定义:动态地给一个对象加入一些额外的职责,就添加功能来说,装饰模式比生成子类更为灵活。

    结构图:


    演示样例代码:

    public abstract class Component {
    
    	 public abstract void operation();
    }
    public class ConcreteComponent extends Component{
    
    	@Override
    	public void operation() {
    		// TODO Auto-generated method stub
    		System.out.println("详细对象操作!");
    	}
    
    }
    public class ConcreteDecoratorB extends Decorator {
    	
    	@Override
    	public void operation() {
    		// TODO Auto-generated method stub
    		super.operation();
    		System.out.println("详细装饰对象B的操作");
    	}
    
    	private void AddedBehavior() {
    		System.out.println("我是B操作");
    	}
    }
    
    public class ConcreteDecoratorA extends Decorator {
    
    	private String addedState;
    	
    	@Override
    	public void operation() {
    		// TODO Auto-generated method stub
    		super.operation();
    		addedState = "New State";
    		System.out.println("详细装饰对象A的操作");
    	}
    
    }
    
    client代码例如以下所看到的:

    public class Client {
    
    	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();
    //		d1.setComponent(d2);
    //		d1.operation();
    	}
    
    }
    
    执行结果例如以下:

    详细对象操作!
    详细装饰对象A的操作
    详细装饰对象B的操作


  • 相关阅读:
    [WPF系列] window自定义
    [WPF系列]-Prism+EF
    C#基础-事件 继承类无法直接引发基类的事件
    [WPF系列] 高级 调试
    [WPF系列]-DynamicResource与StaticResource的区别
    [WPF系列]-DataBinding 绑定计算表达式
    [WPF系列]- Style
    [WPF系列]-基础 TextBlock
    [WPF系列]-ListBox
    [WPF系列]-DataBinding 枚举类型数据源
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6692972.html
Copyright © 2011-2022 走看看