Dynamic proxies support meta-programming and extend the reflective abilities of Java beyond pure introspection. Proxy objects are interpreted as meta-objects that control the behaviour of application objects at the base level. In this paper, we investigate the implications of applying reflective programming techniques provided by proxies. We address the problem of how such proxies can support open implementation for customising application behaviour. We then examine the consequences of adapting design patterns to a proxy-based reflection model. Our research shows dynamic proxies to be a valuable mechanism for understanding Java language characteristics in greater detail and also an aid to object-oriented reuse.