应用场景: 客户代码过多的依赖对象容器的复杂的内部实现,对象容器内部的变化将导致客户端的代码的剧烈变化。将客户代码和对象容器解耦,从而更能够应对变化。 实现代码: public interface IBox { void Process(); void Add(IBox box); void Remove(IBox box); } public class SingleBox : IBox { public void Process() { // do process for myself } public void Add(IBox box) { // 两个实现方案 // 1. do nothing // 2. throw exception } public void Remove(IBox box) { // 1. do nothing or // 2. throw exception } } public class ContainerBox : IBox { // do process for myself // do the process fo r the box in the list ArrayList list; public void Process() { if (list != null) { foreach (IBox box in list) { box.Process(); } } } public void Add(IBox box) { if (list == null) { list = new ArrayList(); } list.Add(box); } public void Remove (IBox box) { if (list == null) { throw new Exception(); } list.Remove(box); } public ArrayList GetBoxes() { return list; } }