当看到“new”就想到“具体”,增加了耦合度。
提取客户的代码中变化部分(new创建对象),单独创建一个对象(工厂)来处理“new”。这样,创建新类时,我们就不需要修改客户端代码,修改工厂对象即可。也可以把这个工厂定义为静态方法(静态工厂)
简单工厂模式
简单工厂模式的工厂类一般采用静态方法,通过接收不同的参数决定返回不同的对象(根据不同的条件创建不同实例)。工厂类集中了所有实例的逻辑,违反了高内聚这一原则,它所能创建的类只能是事先考虑好的,如果一旦添加新的类就需要改变工厂类了
工厂方法模式
定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法(接口中创建对象的方法)让类把实例化延迟到子类.
工厂方法模式类图:
与简单工厂的区别:简单工厂是将对象的创建封装起来,但是它不具备工厂方法的弹性(ConcreteCreator可以有多个,需要哪个就调用哪个),不能变更正在创建的产品。
工厂方法模式的核心工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去完成,这就允许系统在不修改工厂角色的情况下,创建新的产品。
设计原则:要依赖抽象,不要依赖具体类。即不能让高层组件依赖低层组件,并且两者都应该依赖抽象。
依赖倒置原则(如果具体类不会改变则不需要遵守):
-
变量不可以持有具体对象的引用(new就会持有具体类,可以使用工厂)
-
不要让类派生自具体类(派生自抽象)
-
不要覆盖基类已实现的方法
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类
与工厂方法模式的区别:工厂方法使用继承,抽象工厂使用组合,而且适用于产生一系列产品集合,可以用来产生新产品集合,但是如果增加一个新产品,则要改动几乎所有的工厂类。
区别:
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
工厂方法模式与抽象工厂模式
工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
对于java来说,大部分抽象工厂模式都是这样的: ---它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。 比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。 这样A和B就是工厂,对应于抽象工厂; 每个工厂生产的鼠标和键盘就是产品,对应于工厂方法; 用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到微软。但是用了抽象工厂模式,你只要换家工厂,就可以同时替换鼠标和键盘一套。如果你要的产品有几十个,当然用抽象工厂模式一次替换全部最方便(这个工厂会替你用相应的工厂方法) 所以说抽象工厂就像工厂,而工厂方法则像是工厂的一种产品生产线
相关推荐
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
这个是http://blog.csdn.net/dawanganban/article/details/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。
设计模式——抽象工厂模式源码,设计模式——抽象工厂模式源码
这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。
经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习
vs2010实现的软件设计模式——抽象工厂,是软件工程专业学生专业技能之一
Android之大话设计模式——:抽象工厂模式借鉴.pdf
Android之大话设计模式——:抽象工厂模式参考.pdf
主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。
NULL 博文链接:https://maidoudao.iteye.com/blog/1328618
工厂模式: – 实现了创建者和调用者的分离。 – 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改...
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此 时工厂类不再负责所有产品的创建,而...下面看下工厂模式 的具体实现代码(这里还是以简单工厂模式中点菜的例子来实现):
简介 设计模式是为了解决一些出现的问题设计的解决方案。是长时间经验的总结,是根据...工厂模式 在类中实现一个接口创建指定对象,使一个类的实例化延迟到了子类。简单来说把类的创建都封装起来,只需要调用一个子类
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。...1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
利用JAVA设计模式——工厂模式实现对MYSQL数据库的增删改查
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
写博客上传的代码:blog http://blog.csdn.net/t1234xy4/article/details/52424048
SETema5 软件设计模式——抽象工厂