刚出来工作的半年里,都是拼命加班写基础代码,觉得写起代码来已经非常娴熟,认为已经是个不错的程序员,不久在接手系统设计相关的工作后,才觉得设计模式的重要,虽然不需要给自己条条框框,但也给自己一个参考的标准。总之,在接触了设计模式后才有脱胎换骨的感觉,下面,开始把平时看的相关内容整理一下,以给自己常常重温和参考:
工厂模式:
工厂模式是GOF设计模式的主要常用模式,它主要是为创建对象提供了一种接口,工厂模式主要是封装了创建对象的细节过程,从而使得外界调用一个对象时,根本无需关心这个对象是如何产生的。
在GOF设计模式中,工厂模式分为工厂方法模式和抽象工厂模式。两者主要区别是,工厂方法是创建一种产品接口下的产品对象,而抽象工厂模式是创建多种产品接口下的产品对象,非常类似Builder生成器模式。在平时实践中,使用较多的基本是工厂方法模式。
以类SampleOne为例,要创建SampleOne的对象实例:
SampleOne sampleOne = new SampleOne();
如果Sample类有几个相近的类:SampleTwo或SampleThree,那么创建它们的实例分别是:
SampleTwo sampleTwo = new SampleTwo();
SampleThree sampleThree = new SampleThree();
其实这3个类都有一些共同的特征,如网上商店中销售书籍、玩具或者化妆品。虽然它们是不同的具体产品,但是它们有一个共同特征,可以抽象为“商品”。日常生活中很多东西都可以这样高度抽象成一种接口形式。上面这3个类如果可以抽象为一个统一接口SampleIF,那么上面语句就可以成为:
SampleIF sampleOne = new SampleOne();
SampleIF sampleTwo = new SampleTwo();
SampleIF sampleThree = new SampleThree();
在实际情况中,有时并不需要同时生成3种对象,而是根据情况在3者之中选一个。在这种情况下,需要使用工厂方法来完成了,创建一个叫SampleFactory的抽象类:
public class SampleFactory{
public abstract SampleIF creator();
}
在这个抽象工厂类中有一个抽象方法creator,但是没有具体实现,而是延迟到它的子类中实现,创建子类SampleFactoryImp:
public class SampleFactoryImp extends SampleFactory{
public SampleIF creator(){
//根据其他因素综合判断返回具体产品
//假设应该返回SampleOne对象
return new SampleOne();
}
}
在SampleFactoryImp中根据具体情况来选择返回SampleOne、SampleTwo或SampleThree。所谓具体情况有很多种:上下文其他过程计算结果;直接根据配置文件中配置。
上述工厂方法模式中涉及到一个抽象产品接口Sample,如果还有其他完全不同的产品接口,如Product等,一个子类SampleFactoryImp只能实现一套系列产品方案的生产,如果还需要另外一套系统产品方案,就可能需要另外一个子类SampleFactoryImpTwo来实现。这样,多个产品系列、多个工厂方法就形成了抽象工厂模式。
分享到:
相关推荐
高校毕业设计信息-高校毕业设计信息系统-高校毕业设计信息系统源码-高校毕业设计信息管理系统-高校毕业设计信息管理系统java代码-高校毕业设计信息系统设计与实现-基于ssm的高校毕业设计信息系统-基于Web的高校毕业...
高校毕业设计信息-高校毕业设计信息系统-高校毕业设计信息系统源码-高校毕业设计信息管理系统-高校毕业设计信息管理系统java代码-高校毕业设计信息系统设计与实现-基于ssm的高校毕业设计信息系统-基于Web的高校毕业...
毕业设计-毕业设计系统-毕业设计系统源码-毕业设计管理系统-毕业设计管理系统java代码-毕业设计系统设计与实现-基于springboot的毕业设计系统-基于Web的毕业设计系统设计与实现-毕业设计网站-毕业设计网站代码-毕业...
1、资源说明:毕业设计系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生...
毕业设计-毕业设计系统-毕业设计系统源码-毕业设计管理系统-毕业设计管理系统java代码-毕业设计系统设计与实现-基于springboot的毕业设计系统-基于Web的毕业设计系统设计与实现-毕业设计网站-毕业设计网站代码-毕业...
在进行硬件设计时,了解并掌握相关知识点至关重要。 首先,我们要知道RTL8211E系列是Realtek的一颗单端口、全双工、无阻塞的千兆以太网控制器。它支持PCI Express接口,可以实现高速数据传输,同时具备低功耗特性,...
毕业设计成绩-毕业设计成绩系统-毕业设计成绩系统源码-毕业设计成绩管理系统-毕业设计成绩管理系统java代码-毕业设计成绩系统设计与实现-基于springboot的毕业设计成绩系统-基于Web的毕业设计成绩系统设计与实现-...
毕业设计成绩-毕业设计成绩系统-毕业设计成绩系统源码-毕业设计成绩管理系统-毕业设计成绩管理系统java代码-毕业设计成绩系统设计与实现-基于springboot的毕业设计成绩系统-基于Web的毕业设计成绩系统设计与实现-...
课程设计选题-课程设计选题系统-课程设计选题系统源码-课程设计选题管理系统-课程设计选题管理系统java代码-课程设计选题系统设计与实现-基于springboot的课程设计选题系统-基于Web的课程设计选题系统设计与实现-...
课程设计选题-课程设计选题系统-课程设计选题系统源码-课程设计选题管理系统-课程设计选题管理系统java代码-课程设计选题系统设计与实现-基于springboot的课程设计选题系统-基于Web的课程设计选题系统设计与实现-...