今天谈一下对工厂模式学习的总结。

看完视频和文章之后要自己表述工厂模式,总是感觉无从说起,不知道怎么去定义工厂模式,反复看了几遍之后终于理解一点。

自己理解工厂模式是通过这两种模式的特点来理解和定义的,首先工厂模式有简单工厂模式(不在23中设计模式中),工厂方法模式,抽象工厂模式,把三种模式对比来定义,根据不同模式的特点来记忆。

工厂模式是让对象的创建和使用分离,每次使用时不用自己创建,把创建对象的过程交给工厂来完成。

定义(仅供参考 -- 理解后再形成自己的定义)

工厂方法模式定义:定义创建一个产品的工厂接口,将这一个产品的具体创建方法延迟到子类工厂实现,当需要使用这个产品时通过工厂获取。

如果只有一类产品定义为简单工厂模式了.

抽象工厂模式定义:定义创建一系列产品的工厂接口,将这一系列产品的具体创建过程延迟到子类工厂,使用时通过工厂就可以创建一系列的产品。

优缺点对比

工厂方法模式:

优点-可以进行不同产品的扩展,如定义一个水果类工厂就可以创建不同的水果,现在要扩展一个蔬菜类产品就再定义一个蔬菜类工厂。

缺点-单要创建一系列产品类的时候,会出现工厂泛滥,一个产品类就要创建一个产品接口,一个产品工厂,增加系统复杂性。比如我还要创建动物类,工具类等,

工厂将越来越多。

抽象工厂模式:

优点-可以创建一系列的产品,当增加新的产品系列可以不用修改代码,如建了一个海尔系列的电器,再建一个格力系列的就可以只增加一个名称。

缺点-当增加一个产品时要改动工厂所有的接口。如工厂创建的是洗衣机,电视,空调,现在要增加一个热水器的产品,那么所有工厂子类都要增加。

模式结构对比

工厂模式的结构:

1.抽象产品:Product

2.抽象工厂:AbstractFactory

3.具体产品:Concrete Product

4.具体工厂:Conrete Factory

抽象工厂模式结构:

1.抽象产品系列:Product

2.抽象工厂:AbstractFactory

3.具体产品系列:Concrete Product

4.具体工厂:Conrete Factory

上代码

工厂模式:

//产品

public interfaceProduct {public voidrun();

}//工厂

public interfaceFactory {publicProduct createFactory();

}//车类产品和工厂

public class Car implementsProduct {

@Overridepublic voidrun() {

System.out.println("驾车起飞。。。。。。");

}

}public class CarFactory implementsFactory {

@OverridepublicProduct createFactory() {return newCar();

}

}//食物类产品和工厂

public class Food implementsProduct{

@Overridepublic voidrun() {

System.out.println("eat.......");

}

}public class FoodFactory implementsFactory {

@OverridepublicProduct createFactory() {return newFood();

}

}//测试代码

public classTestFactory {public static voidmain(String[] args) {

Factory f= newCarFactory();//Factory f = new FoodFactory();

Product p =f.createFactory();

p.run();

}

}

抽象工厂模式:

//产品系列

public interfaceTV {public voidshow();

}public interfaceWashing {public voidwash();

}public interfaceAir {public voidfever();

}//产品工厂

public interfaceAbstractFactory {publicTV crateTV();publicAir createAir();publicWashing createWashing();

}//HR系列产品

public class HRTelevision implementsTV{

@Overridepublic voidshow() {

System.out.println("海尔电视。。。。。");

}

}public class HRWarshing implementsWashing{

@Overridepublic voidwash() {

System.out.println("海尔洗衣机。。。");

}

}public class HRAir implementsAir{

@Overridepublic voidfever() {

System.out.println("海尔空调。。。");

}

}//HR系列产品工厂

public class HRFactory implementsAbstractFactory {

@OverridepublicTV crateTV() {return newHRTelevision();

}

@OverridepublicAir createAir() {return newHRAir();

}

@OverridepublicWashing createWashing() {return newHRWarshing();

}

}//GL系列产品

public class GLTelevision implementsTV{

@Overridepublic voidshow() {

System.out.println("格力电视。。。。");

}

}public class GLAir implementsAir {

@Overridepublic voidfever() {

System.out.println("格力空调。。。。。");

}

}public class GLWashing implementsWashing {

@Overridepublic voidwash() {

System.out.println("格力洗衣机。。。");

}

}//GL系列产品工厂

public class GLFactory implementsAbstractFactory {

@OverridepublicTV crateTV() {return newGLTelevision();

}

@OverridepublicAir createAir() {return newGLAir() ;

}

@OverridepublicWashing createWashing() {return newGLWashing();

}

}//测试代码

public classTest {public static voidmain(String[] args) {//AbstractFactory f = new GLFactory();

AbstractFactory f = newHRFactory();

TV tv=f.crateTV();

Air air=f.createAir();

Washing warsh=f.createWashing();

tv.show();

air.fever();

warsh.wash();

}

}

测试代码中只需要修改工厂类就可以实现生产不同的产品和不同的产品系列了, 当工厂可以通过配置文件来取的时候就不用更改任何代码就实现了,实际生产中工厂都可以通过快速编码来配置,很多成型的产品都是直接配置就能完成整个系统的初始化了。

这是自己理解并输入的第二篇关于设计模式的笔记了,只是看一遍和根据自己的思路写一遍真的是完全不同的感觉,如果只是看一遍过一天可能就忘记了, 如果自己思路清晰之后再自己设计下,根据思路写一遍如果有问题又回去看看具体细节,一路记下来差不多就能搞定了,希望对路过的你有帮助。

后续继续学习中。。。

格力电器Java面试题_JAVA设计模式学习--工厂模式相关推荐

  1. java 设计模式 路由器_java设计模式2————工厂模式

    java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...

  2. java 工厂模式详解_Java设计模式之工厂模式详解

    简单工厂其实并不是设计模式,只是一种编程习惯. 首先我们创建父类Cup,所有杯子类的父类.再创建它的子类BigCup和SmallCup类. public abstract class Cup { pu ...

  3. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  4. java抽象工厂模式_JAVA设计模式-抽象工厂模式

    定义 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构. 抽象工厂模 ...

  5. java 反射抽象_Java实现抽象工厂模式+java的反射的机制

    Java的反射机制: JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法 ...

  6. 设计模式学习 - 工厂模式

    工厂模式: 定义了一个创建对象的接口,但由它的子类决定实例化哪一个对象.工厂方法将对象的实例化延迟到了子类. 模式组成: 一组使用者:父类定义一个创建对象的接口及其他通用接口,子类负责创建对象接口的具 ...

  7. 设计模式学习--工厂模式

    1.概述 工厂模式根据提供给他的数据,返回一个可能类中的一个类的实例. 2.示例  1using System;  2using System.Collections.Generic;  3using ...

  8. 设计模式学习-工厂模式

    工厂模式 工厂方法模式通过选取相关的实现类来满足调用组件的请求,调用组件无需了解这些实现. 何时使用 调用组件需要根据不同情况调用多个类的时候可以考虑使用工厂 下面是示例代码 ///用基类实现更合适. ...

  9. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)

    前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...

最新文章

  1. 计算机二级无法完成初始化,2012年计算机等级考试二级C语言常见问题:声明和初始化...
  2. 用Delphi设计能携带附件的EMail
  3. 有哪些论文中最普遍出现的无效关键词?
  4. html文件设置ftp6,vsftp的安装与配置
  5. 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
  6. SQL从入门到入魔之select简单查询
  7. 示例 - 10行代码在C#中获取页面元素布局信息
  8. react 实用项目分享-mock server
  9. 计算机大学英语值最高的3项,计算机应用基础试卷
  10. c++ string split_闲话Python之砍瓜切菜split()
  11. Qt之QSS使用与基本语法
  12. FTP 权限的修改 之CuteFTP问题
  13. 标准库函数begin和end的使用
  14. 高三数学辅导:不等式、推理与证明
  15. 网站克隆工具_全员惊艳!强推5款高质量的小众实用网站
  16. 2021-04-26 PNP三极管
  17. (附源码)SSM学生社团管理系统JAVA计算机毕业设计项目
  18. 是不正确的python语句_关于Python的if else语句,调用else不正确的问题
  19. Word文档中如何快速切换英文大小写
  20. Real-Time Rendering——Chapter 8 Light and Color光和颜色

热门文章

  1. [2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 论文简析
  2. transporter上传卡正在交付_【iOS】Xcode11使用Transporter将APP上传到App Store,卡在正在验证APP...
  3. Linux基础(存储结构和磁盘划分)
  4. 向上传文件服务器,向服务器上传文件
  5. Oracle 11g系统自动收集统计信息
  6. 日常问题——flume连接hive时报错Caused by: java.lang.NoSuchMethodError
  7. 3-docker 架构和底层技术简介
  8. Jenkins自定义主题教程
  9. 在linux上执行.net Console apps
  10. 游戏外挂是怎么炼成的