MyException - 我的异常网
当前位置:我的异常网» 设计模式 » java设计模式之工场设计模式(Factory)

java设计模式之工场设计模式(Factory)

www.MyException.Cn  网友分享于:2013-10-08  浏览:0次
java设计模式之工厂设计模式(Factory)

 

 

 

 

 

 

设计模式根据使用类型可以分为三种:
1、 创建模式: Factory (工厂模式)、 Singleton (单态)、 Builder ( (建造者模式)、 Prototype ( (原型模式)、工厂方法模式。

2、 结构模式: Flyweight ( (共享模式)、 Bridge ( (桥模式)、 Decorator ( (装饰模式)、 Composite ( (组合模式)、 Adapter (适配器模式)、 Proxy ( (代理模式)、 Facade ( (外观模式)。

3、 行为模式: Iterator (迭代模式) 、Template ( (模板模式)、 Chainof Responsibility ( ( 责 任 链 模 式 ) 、 Memento ( ( 纪 念 品 模 式 ) 、Mediator ( (中介模式)、 Interpreter ( (解释器模式)、

  Strategy (策略模式)、 State 、 Observer ( (观察者模式)、 Visitor ( (访问模式)、Command ( (命令模式)。

 

一、工厂模式(Factory)

    工厂模式是在我们日常开发过程中使用频率非常高的一种设计模式,其定义:Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses(定义一个创建对象的接口,让子类决定实例化哪个具体的类,并且使类的实例化放到子类中去).简单的来说工厂模式就是就创建对象的时候类似于工厂一样根据用户的不同需求去生产不同的产品,从而避免了客户每需要一种新的产品就需要一个专门的公司去生产(即需要去new 不同的对象)

 

  简单工厂模式(Simple Factory):具体代码链接

 

    场景:有两种角色的人(老师、学生),不适使用工厂模式的时候需要分别去new这两种类型的对象,使用工厂模式之后只需要在工厂类中根据不同的特性分别去创建不同的对象

    优点:

      1、实现了对责任的分割,对象的创建都在工厂内完成避免了客户端去创建产品

      2、客户端只需要知道创建的产品名而不必关心具体的产品的类名

      3、可以通过引入配置文件的方式在不修改客户端代码的前提下更换和增加新的实体产品

    缺点:

      1、所有的对象的创建都在工厂类完成,一旦工厂类出现异常整个系统都要受到影响

      2、会增加系统中类的个数,增加了系统的复杂度

      3、系统扩展性差,在新增加了产品就必须修改工厂类的代码

    Person类:

        

     工厂类:

        

    学生的实现类:

      

    老师的实现类:

        

    消费者类:

      

    

  工厂方法(Factory Method):代码链接

    工厂方法模式和简单工厂模式相比,抽象了工厂角色和产品角色,并将每个具体类的实例化放到了子类当中去了

    场景:现有两种角色的人(老师、学生)都需要参加考试这项活动,但是因为角色的不同在这项活动中的动作也不同(学生参加考试,老师监考)

    

    优点:

        1、用户值只需要关心产品对应的工厂,无需关键创建细节

        2、该模式的多态性设计使得工厂可以自主确定创建何种产品对象,而创建的细节是封装在实体工厂的内部

        3、加入新产品时无需修改抽象工厂和抽象产品,只需要添加一个实体工厂和一个实体的产品类即可,符合ocp原则

    缺点:

        1、在增加新产品时需要编写新的实体产品类以及与之对应的实体工厂类,在一定成都上增加了系统的复杂度,给整个系统带来额外的开销

        2、在客户端中使用了抽象层定义,增加了系统的抽象性和理解难度,而且实现时使用到了反射,一定成都上增加了系统实现的难度

 

    抽象产品类:

      

    具体实现类:

      

 

      

    抽象工厂类:

      

     工厂实现类:

      

    消费者类:

      

   抽象工厂(Abstract Factory):代码链接

    场景:现需要生产两款手机(iPhone 7和华为P10)

    优点:

        1、隔离了具体类的生成,使用户不需要关心实体产品什么时候被创建了

        2、当一个抽象产品的多个对象(例如华为P系列手机中的P8、P9、p10)设计成实现同一个抽象产品时,能够保证客户端只使用同一种产品

    缺点:

        1、添加新的产品时难以扩展抽象工厂

 

 

    抽象工厂类:

        

        

        

 

 

    实体工厂类:

      

    抽象产品类:

      

      

    实体产品类:

      

      

    消费者类:

      

   总结:

      工厂设计模式的使用主要时为了降低整个系统模块之间的耦合成都,增加系统的可扩展性,在新增或修改功能时不修改或尽量少的修改原有的代码,使得后期的系统维护变得更加简单

 

文章评论

那些争议最大的编程观点
那些争议最大的编程观点
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员的鄙视链
程序员的鄙视链
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
漫画:程序员的工作
漫画:程序员的工作
鲜为人知的编程真相
鲜为人知的编程真相
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
我是如何打败拖延症的
我是如何打败拖延症的
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
每天工作4小时的程序员
每天工作4小时的程序员
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
旅行,写作,编程
旅行,写作,编程
编程语言是女人
编程语言是女人
 程序员的样子
程序员的样子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员应该关注的一些事儿
程序员应该关注的一些事儿
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
代码女神横空出世
代码女神横空出世
Java程序员必看电影
Java程序员必看电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
一个程序员的时间管理
一个程序员的时间管理
程序员都该阅读的书
程序员都该阅读的书
10个调试和排错的小建议
10个调试和排错的小建议
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员必看的十大电影
程序员必看的十大电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我的丈夫是个程序员
我的丈夫是个程序员
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员和编码员之间的区别
程序员和编码员之间的区别
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
如何成为一名黑客
如何成为一名黑客
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
为什么程序员都是夜猫子
为什么程序员都是夜猫子
中美印日四国程序员比较
中美印日四国程序员比较
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有