工厂模式分为哪三种类型(工厂模式分为哪三种类型图片)
大家好!今天让创意岭的小编来大家介绍下关于工厂模式分为哪三种类型的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、MVC包命名
工厂类你可以新建个factory文件夹或直接放在项目根目录下
i18n的propertiies文件直接放在项目根目录下
工厂模式都属于创建(对象)型模式
工厂模式分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
一一看来:
1)简单工厂模式(Simple Factory)
又称 静态工厂方法模式(因为它是静态方法声明的)通过一个生产车的厂 来说明。
e.g:
package com.factory;
interface Cars {
public void car();
}
class BenChi implements Cars {
public void car() {
System.out.println("生产奔驰车");
}
}
class FuTe implements Cars {
public void car() {
System.out.println("生产福特车");
}
}
//注意:工厂里的那个方法是静态的,使用了类反射来动态创建对象。
class
CarsFactory {
public static Cars getInstance(String type) {
Cars c =
null;
try {
c = (Cars) Class.forName("com.factory." +
type).newInstance();
} catch (Exception e) {
c = null;
}
return c;
}
}
public class Car {
public static void main(String[] args) {
Cars c =
CarsFactory.getInstance("BenChi");
if (c != null) {
c.car();
} else {
System.out.println("我们这不生产你要求类型的车");
}
}
}
简单工厂的优点在于他的工厂类负责所有对象的创建,通过工厂类,外界可以从直
接创建具体产品的尴尬局面中脱离出来 ,只关注使用对象就可以了 ,而不必管对
象是怎么创建的 。
工厂类负责类的创建 ,缺点也产生了,造成工厂类需要复杂的业务逻辑。
该怎么解决这一点,工厂方法模式出现了。
2)工厂方法模式(Factory Method)
工厂方法模式又称工厂模式,也叫虚拟构造器模式或者多台工厂(Polymorphic Factory)模式.
简单工厂 核心是个
具体工厂类!
而工厂方法模式的核心 是个抽象工厂类!具体实现交给他的子类实现。
用意:定义一个创建产品对象的工厂接口,将实际的创建工作推迟到子类中(利用多态)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
e.g:
package com.factory.method;
// 产品 Fruit接口
interface Fruit {
public void getFruit();
}
// 具体产品Apple,Orange
class Apple implements Fruit {
public Apple()
{
System.out.println("种植苹果");
}
public void getFruit() {
System.out.println("收获苹果");
}
}
//
抽象工厂方法
interface FruitAbstractFactory {
public Fruit
createFruit();
}
// 具体工厂方法
class AppleFactory implements FruitAbstractFactory {
public
Fruit createFruit() {
return new Apple();
}
}
public class Text
{
public static void main(String[] args) {
FruitAbstractFactory
appleFactory = new AppleFactory();
Fruit apple = (Apple)
appleFactory.createFruit();
apple.getFruit();
// FruitAbstractFactory
orangeFactory = new OrangeFactory();
// Fruit orange =
orangeFactory.createFruit();
//
orange.getFruit();
}
}
//如果厂家再想种植桔子的话,只需再写工厂和产品无需修改以前的代码!
class
OrangeFactory implements FruitAbstractFactory {
public Fruit createFruit()
{
return new Orange();
}
}
class Orange implements Fruit {
public Orange() {
System.out.println("种植桔子");
}
public void getFruit() {
System.out.println("收获桔子");
}
}
优势和缺陷
在工厂模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来.如此使得客户可以只关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也不关心它是如何被具体工厂创建的.
1.基于工厂角色和产品角色的多态性设计是工厂方法模式的关键.它能够使工厂可以自主确定创建和中产品对象,而如何穿件这个对象的细节则完全封装在具体工厂内部.工厂方法模式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类.
2.使用工厂方法模式的另外一个优点是在系统中加入新的产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,
而只要添加一个具体工厂和具体产品就可以了,这样,系统的可扩展性非常好.优秀的面向对象设计鼓励使用封存(Encapsulation)和委托(Delegation)来构造软件系统,工厂方法模式正是使用了封装和委托的典型例子,其中封装是通过抽象工厂来体现的,而委托则是通过抽象工厂将创建对象的责任完全交给具体工厂来体现的.
3.使用抽象工厂方法模式的缺点是在添加新产品时,需要重新写一个具体产品类,而且还要提供与之对应的具体工厂类,当两者都比较简单时,系统会有相对额外的开销.
应用情景:
类不知道自己要创建哪一个对象.
类用它的子类来指定创建哪个对象.
客户需要清楚创建了哪一个对象.
3)抽象工厂模式(Abstract Factory)
先来看一下他个工厂方法的区别:
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
Thinking in this way:
Abstract Factory is a factory making a family of
ABSTRACT products.
Factory Method is a factory implemented as a METHOD. The
key of this pattern is letting subclasses override the method.
简单点:
抽象工厂生产的是一套产品。结合个例子是否就明白了 ?
例如生产电脑:
生产的 键盘 鼠标 主板 是一套产品 共同组成了电脑。
package com.factory.abstracttrue;
interface AbstractFactory {
public void createMouse();
public void createKeyKoard();
public void createMainPane();
}
class ComputerFactory implements AbstractFactory {
KeyBoard keyBoard =
null;
MainPane mainPane = null;
Mouse mouse = null;
public void createKeyKoard() {
System.out.println("制造了诺顿牌键盘");
keyBoard = new KeyBoard();
}
public void createMainPane() {
System.out.println("制造了力稳牌主板");
mainPane = new MainPane();
}
public void createMouse() {
System.out.println("制造了飞燕牌鼠标");
mouse
= new Mouse();
}
public void show() {
keyBoard.keyKoard();
mainPane.mainPane();
mouse.mouse();
}
}
interface AbstractMouse {
public void mouse();
}
interface AbstractKeyBoard {
public void keyKoard();
}
interface AbstractMainPane {
public void mainPane();
}
class Mouse implements AbstractMouse {
public void mouse() {
System.out.println("鼠标性能灵活");
}
}
class KeyBoard implements AbstractKeyBoard {
public void keyKoard() {
System.out.println("键盘功能丰富");
}
}
class MainPane implements AbstractMainPane {
public void mainPane() {
System.out.println("主板性能稳定");
}
}
public class Client {
public static void main(String[] args) {
AbstractFactory computerFactory = new ComputerFactory();
computerFactory.createKeyKoard();
computerFactory.createMainPane();
computerFactory.createMouse();
((ComputerFactory)
computerFactory).show();
}
}
总结:
对于系统中两个实例a和b,他们的关系 要么a使用b,要么a创建b,但两种关系一
定不要同时存在。【这大概是工厂模式出现的目的吧,(及创建型模式)】
简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂模式:用来生产同一等级结构中的固定产品。(支持增加新产品)
抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
二、什么是Java的工厂模式?
factory模式不需要建立什么包,完全得靠你对factory模式的理解,工厂模式基本上应该是体现了一个多态的概念,用户只关心结果,而不需要关心其具体过程...
工厂模式有三个参与者,抽象产品(Product)、工厂(Creator)和具体产品(ConcreteProduct)。客户只会看到工厂和抽象产品。
public interface Product{
public String getName();
}
public class ConcreteProduct implements Product{
public String getName(){
return "产品1";
}
}
public class Creator{
public static Product create1(){
return new ConcreteProduct();
}
}
工厂模式的作用在于将创建具体产品的方法由工厂类控制,客户只需要知道产品的抽象类型
三、工厂模式,简单工厂模式,抽象工厂模式 三者有什么区别
工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(open close principle),对扩展开放,对修改关闭。
抽象工厂模式:这个模式我总是感觉和builder模式非常相似。
工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的。
有人做如下的比较:
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
下面是一个形象的比喻:
无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup)的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的new Cup();这个Cup必须是具体的。厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜,java并不能new一个抽象的Cup,所以就有了简单工厂模式。原来是Cup cup=new Cup;现在是SimpleCupFactory.createCup(String cupName),根据cup的名字生产Cup,而createCup返回的是一个实现了 Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改createCup方法,这就不合理了。我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。CupFactory.createCup()创建Cup.CupFactory是接口或抽象类。实现它的具体子类会创建符合Cup接口的具体Cup。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式。
四、谁能帮简单介绍一下工厂模式呢?
你好,很高兴能解答你的问题。
首先工厂模式是软件开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式主要的意图是:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
案列1:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
案例2:日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
希望能帮到你,谢谢!
以上就是关于工厂模式分为哪三种类型相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读:
手机图标怎么换成自定义图片(OPPO手机图标怎么换成自定义图片)
工商银行商户收款码app(工商银行商户收款码收款有手续费吗)