Archive for 19 10 月, 2010

设计模式学习——Factory Method(工厂方法)

星期二, 19 10 月, 2010

意图:定义一个用于创建对象的接口,让子类决定实现化哪一个类。将实例化推迟到子类。

问题:一个类需要实例化另一个类的派生类,但不知道是哪一个。Factory Method允许派生类进行决策。

解决方案:派生类对实例化哪个类和如何实例化做出决策。

参考者与协作者:Product是工厂方法所创建的对象类型的接口。Creator是定义工厂方法的接口。

效果:客户将需要派生Creator,以创建一个特定的ConcreteProduct对象。

实现:在抽象类中使用一个抽象方法(即C++的纯虚函数)。需要实例化一个被包含对象的时候抽象类的代码将引用此方法,但是不知道需要的对象是哪一个。

(更多…)

设计模式学习——Object Pool(对象池)

星期二, 19 10 月, 2010

意图:在创建对象比较昂贵,或者对于特定类型能够创建的对象数目有限制时,管理对象的重用。(比如数据库连接)

问题:对象的创建和/或管理必须遵循一组定义明确的规则集。通常这些规则都与如何创建对象、能够创建多少个对象和在已有对象完成当前任务时如何重用它们等等相关。

解决方案:在需要一个Reusable对象时, Client调用ReusablePool的acquireReusable方法。如果池是空的,那么acquireReusable方法创建一个Reusable对象(如果能够),否则,就等待直到有Reusable对象返回集合。

参与者与协作者:ReusablePool管理着Client所用的Reusable对象的可用性。Client然后在一个有限的时间段内使用Reusable对象的实例,ReusablePool包含所有Reusable对象,这样就可以对其以统一的方式进行管理。

效果:最适用于对对象的需求一直非常稳定的时候,需求变化太大会带来性能问题。ObjectPool中为了解决这一问题,限制了能够创建的对象数量。使管理实例创建的逻辑与实例被管理的类分离,可以得到内聚更好的设计。

实现:如果可以创建的对象数量有限制,或者池的大小有限制,可以使用一个简单的数组来实现池。否则,使用vector对象,负责管理对象池的对象必须惟一能够创建这些对象的对象。ReusablePool是用Singleton模式实现的。另一种变体是在Reusable对象中加一个释放方法——让它自己返回到池。

(更多…)

兲朝特色——过河(漫画)

星期二, 19 10 月, 2010

看图不说话……