这段时间主要集中精力学习了以下创建型设计模式。3个工厂模式(简单工厂模式,工厂方法模式以及抽象工厂模式),Builder生成器模式,Prototype原型模式,Singleton单件模式。其中,简单工厂模式不是gang of four的23个模式中的一个。
创建型模式主要就是要解决一个new的问题。常规的创建对象的方法:
Girl g = new Girl();
New的 问题是:实现依赖,不能应对具体实例化类型的变化。解决思路:封装变化点,哪里变化就封装哪里。创建型模式的共同点就是对象创建,因此就要封装对象创建。 其中面向接口编程,依赖接口而非依赖实现,是非常好的一个办法。当然了,用抽象类也可以的。简单工厂模式就在这种情况下应运而生了。把Girl抽象为一个接口,然后有美girl(American girl),土girl(Turkey girl),点点点。这样,我们在上层架构的时候,在需要用到girl的地方,用interface Girl来替换就好了,而不用管它是美还是土,这就是所谓的依赖接口,不依赖实现。恩。也就是将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好的解决了使用者和具体类之间的耦合关系。
当然了,Singleton的主要作用是解决了实体对象个数的问题。其他创建型模式解决的都是new所带来的耦合性关系。
Factory Method模式解决了单个对象的需求变化,Abstract Factory模式解决了系列对象的需求变化,Builder模式解决了对象部分的需求变化。
Builder: 在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈 的变化,但是将他们组合在一起的算法却相对稳定。根据封装变化的原理,我们把复杂对象的各个部分隔离出来,从而保持系统中的稳定构建算法不随着需求改变而 改变。
Prototype:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。Factory Method, Abstract Factory, Builder都需要一个额外的工厂类来负责实例化具体对象,而Prototype则是通过原型,一个特殊的工厂类来clone具体对象。
在实际设计过程中,如果遇到易变的具体类,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(Abstract Factory, Builder, Prototype)。
多用,多理解,多思考,多看看这方面的书就能更好的理解OO,OOD,OOP,设计模式等思想。经验也是非常重要的,记得在实际项目中积累这种经验。恩。Come on, Baby!