前言:

前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能不学习一下。

工厂模式:

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

1.)工厂模式分类:
  • 简单工厂模式(Simple Factory)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
2.)简单工厂模式

见名知意,简单的工厂模式,建立一个工厂来制造新的对象,又叫静态工厂。举例说明李先生去4s店要买一部轿车, 如何实现?

1. 首先4s签单一部车Car

public class Car {

    public Car() {
Log.e("car", "Car---->我要买车");
} }

2.然后4s店通知CarFactory 工厂生产

public class CarFactory {

    public static Car createCar() {
return new Car();
} }

3.最后按时生产完毕的话将交付给李先生

 Car car = CarFactory.buildCar();

整个过程李先生一点不清楚整个轿车的制造过程的情况买到一辆车,通过工厂模式 使得需求和实现解耦。由于工人放假,4s店没有按时交车导致违约,再加上李先生是个多变的人执意退车,而且选择不买轿车了,要买一辆suv,这可急死了销售顾问小王,

接下来小王是怎么留住李先生的呢?

4.销售赶紧通知工厂改造生产线能够支持生产多种车型,涵盖轿车、Suv、Mpv等

public class CarFactory {

    public enum CarType {
SUV,//多功能越野车
MPV//多功能商务车
} public static Car createCar() {
return new Car();
} public static Car createCar(CarType type) {
Car car = null;
switch (type) {
case SUV:
car = new SuvCar();
break;
case MPV:
car = new MpvCar();
break;
default:
car = new Car();
break;
}
return car;
}
}

SuvCar

public class SuvCar extends Car {

    public SuvCar() {
Log.e("car", "SuvCar---->Suv");
}
}

MpvCar

public class MpvCar extends Car {

    public MpvCar() {
Log.e("car", "MpvCar---->Mpv");
}
}

5. 最终4s按时交付了李先生的suv

 Car suvCar = CarFactory.createCar(CarFactory.CarType.SUV);

改造工厂之后销售顾问小王的业绩蒸蒸日上,但是好景不长,问题又来了,由于在同一个工厂开发不同的车型导致管理混乱,质量严重不过关,工厂还进行了大量召回和赔偿。接下来公司决定对工厂进行整改。如何整改接下来我们来看工厂方法模式 

3.)工厂方法模式 

     通过上面的简单工厂模式可以看出,其实简单的工厂模式看似用来简单,但是不利于扩展和维护,稍有不慎就有很大的麻烦,鉴于这个原因我们来看下工厂方法模式,工厂方法为工厂类定义了接口或者抽象类,用多态来分配每个子工厂类的职能,还是接着上面的例子来说明。

1.工厂老板重新定义了公司产品对象就是造车

public interface ICarFactory {

    //造车
Car createCar();
}

2.整理产品线,建造两大整车厂分别生产suv、mpv车型

SuvCarFactory 
public class SuvCarFactory implements ICarFactory{
@Override
public Car createCar() {
return new SuvCar();
}
}
MpvCarFactory
public class MpvCarFactory implements ICarFactory{
@Override
public Car createCar() {
return new MpvCar();
}
}

3.这样就可以满足不同的用户

        SuvCarFactory suvCarFactory = new SuvCarFactory();
Car suvCar = suvCarFactory.createCar(); MpvCarFactory mpvCarFactory=new MpvCarFactory();
Car mpvCar=mpvCarFactory.createCar();
4.)抽象工厂方法

抽象工厂:意的意图在于创建一系列互相关联或互相依赖的对象,还是接着上面的例子举例说明,由于车市不景气,国家出台了1.6排量及以下的购置税减半,工厂决定一辆suv出两个版本 一个200T一个300T该如何解决呢?这里就用到抽象工厂方法。

1.宣布调整工厂生产产品对象

public interface AbstractCarFactory {

    //制造发送机
Engine createEngine(); //造车
Car createCar(); }
Engine类
public class Engine {

    public Engine() {
Log.e("Engine", "Engine---->我是发送机");
}
}
Engine200T类
public class Engine200T extends Engine {

    public Engine200T(){
Log.e("Engine", "Engine---->我是200T发动机");
}
}
Engine300T类同上

2.调整产品线以suv200T 、suv300T举例

public class SuvCar200TFactory implements AbstractCarFactory {
@Override
public Engine createEngine() {
return new Engine200T();
} @Override
public Car createCar() {
return new SuvCar();
}
}

300T同上不再写

3.产品输出

  SuvCar200TFactory suvCar200TFactory =new SuvCar200TFactory();
suvCar200TFactory.createEngine();
suvCar200TFactory.createCar();

从举例可以看出工厂方法和工厂抽象的区别在于工厂抽象实现了一系列有关联产品的创建。

Java设计模式之工厂模式(Factory)的更多相关文章

  1. JAVA设计模式之工厂模式—Factory Pattern

    1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...

  2. java设计模式之 工厂模式Factory

    好比某种套路,经过不断实践,证明对项目结构非常有利 如果需要获取某种对象,如同获取不同的产品 需要由工厂来提供,工厂模式 可能的类或者对象:工厂类  产品:Cat  Dog  Fish ... //动 ...

  3. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  4. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  5. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  6. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  7. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  8. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  9. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

  10. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

随机推荐

  1. e.preventDefault() e.stopPropagation()和return false的区别

    e.preventDefault(); //阻止事件的默认行为,比如a标签的转向,但不阻止事件的冒泡传播e.stopPropagation() //阻止事件的冒泡传播,但不阻止其默认行为returne ...

  2. 使用THINKPHP中的控制器和模块查询数据库

    1,自定义一个UserController的控制器,导入tp的控制器与模块执行相应的操作. ----var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值. ...

  3. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载

    Sublime Text这款代码编辑器是Jeff 一直都在使用的,前段时间转用到版本3,因为感觉Sublime Text 3 启动速度更加快,运行更加流畅——虽然3 还是在Beta 阶段.下面就直接分 ...

  4. Django发送邮件

    1. 配置相关参数 如果用的是 阿里云的企业邮箱,则类似于下面: 在 settings.py 的最后面加上这些 EMAIL_BACKEND='django.core.mail.backends.smt ...

  5. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  6. 使用 ServiceStack 构建跨平台 Web 服务

    本文主要来自MSDN杂志<Building Cross-Platform Web Services with ServiceStack>,Windows Communication Fou ...

  7. 如何在Visual Studio 工程之间共享静态内容 (js, css, img, etc.)

     第一步: 文件夹上点击右键 -> Add -> Existing Item,单击选中文件,不要点击“Add”按钮,而是在“Add”按钮右边有个向下的小箭头,点击这个箭头,再点击“Add ...

  8. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)

    这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...

  9. 掀起你的盖头来:Unit Of Work-工作单元

    写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...

  10. CSharpGL(5)解析3DS文件并用CSharpGL渲染

    CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...