现在已经有Car类,有Plane类。
现在做为Client,可以直接new Car,new Plane。
但如果还有其他许多交通工具,我们在客户端就是new A ,new B, new C......然后调用a.x,b.x,c.x
所以们,我们想灵活更换交通工具的话,就想到了多态。
于是乎,改为面向接口式的:
Moveable.java
public interface Moveable {
//默认是public
void run();
}
然后其他交通工具从里面继承。就好了。。。

产生的问题:
Car类的实例,是产品。Plane的实例,也是Plane类对应的产品。
而做为客户,直接对产品进行控制,似乎也说得过去,但如果有一个专门来负责管理产品的类,是不是更好了呢?

所以呢,我们引入了CarFactory和PlaneFactory两个类:
public class CarFactory {
public Car createCar(){
return new Car();
}
}

public class PlaneFactory {
public Plane createPalne(){
return new Plane();
}
}
在客户端:
//这样由plane的工厂来产生plane
PlaneFactory pf = new PlaneFactory();
Moveable m = pf.createPalne();
m.run();

CarFactory cp = new CarFactory();
Moveable m2 = cp.createCar();
m2.run();

写到这,我想你已经猜到我下一步该怎么办了。。
想想啊,前面我们解决了灵活调用交通工具的问题,现在,我们就应该解决灵活调用工厂的问题了。。

所以,我们再把工厂抽象出来:这样,就引入抽象工厂这个概念了。

抽象工厂:就是把原工厂的方法再给抽象出来,把具体生产的动作转变为对某个原有的抽象动作的实现。即是由工厂,到了抽象工厂。

以Car为主线:
也可以用接口,二者均可时,尽量用接口,因为单继承
public abstract class MoveableFactory {
public abstract Moveable create();
}
public class CarFactory extends MoveableFactory{
@Override
public Car create() {
return new Car();
}
}
这样,在客户端,我们只要写:
直接把PlaneFactory改为CarFactory就可以了。
MoveableFactory mf = new PlaneFactory();
Moveable m = mf.create();
m.run();

如上,我们既满足了客户和产品分开的条件,又满足了灵活调用的条件。不错。。。。

Java中的工厂模式(1)相关推荐

  1. java中的工厂模式

    一.工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式的几种形态: (1)简单工厂(Simple Factor ...

  2. java中的工厂模式_java中工厂模式详解和使用方法

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  3. 胡博君解Java中简单工厂模式

    为什么要用简单工厂模式: 我们都知道程序是分开的,客户端中有程序,服务器端有程序,一般来说我们写的main方法中的程序都是在客户端电脑中的,按照我们学习的时候喜欢的写法: //一般来说这个程序都是在客 ...

  4. java中的工厂模式_深入理解Java的三种工厂模式

    一.简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口.抽象类,也可以是具体的类 实现汽车接口 奔驰类 宝马类 简单工厂,既能生产宝马又能生产奔 ...

  5. java中的工厂_java中的工厂模式

    1.工厂模式 java中的工厂模式,个人理解是:要想制作一个汽车,则必须有轮子,发动机,座椅等. 1.创建一个接口,并且使得轮子,发动机,座椅三个实现类实现这个接口. 2.创建一个工厂,生成基于给定信 ...

  6. JAVA设计模式之工厂模式讲解

    目录 前言 开始表演 前言 Java中使用工厂模式的主要原因是为了实现代码的灵活性和可维护性.工厂模式是一种创建型设计模式,它提供了一种将对象的创建和使用进行分离的方式.具体来说,工厂模式可以将对象的 ...

  7. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

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

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

  9. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

最新文章

  1. STD:Sparse-to-Dense 3D Object Detector for Point Cloud(腾讯香港大学)
  2. JavaScript强化教程 -- cocosjs场景切换
  3. 系统文件打开检测脚本
  4. 一天学会 Maven+Springboot+RabbitMQ 微服务快速开发教程
  5. 刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
  6. matlab 光谱噪声,环境小卫星高光谱影像条纹噪声去除程序IDL版
  7. android 温度传感器获取温度,Android 温度传感器返回当前的温度
  8. LeetCode 105. 从前序与中序遍历序列构造二叉树(递归)
  9. 通过阿里OSS文件服务返回的URL获取文件流下载
  10. 在 Panorama 页面中添加 ApplicationBar
  11. WordPress的wp-cumulus插件------------标签云插件
  12. 【破损识别】基于matlab GUI机器视觉+SVM玉米种子破损识别(带面板)【含Matlab源码 1651期】
  13. 开源无人机如何实现空对地框选撞击?
  14. 架设Wikipedia的本地镜像(Linux联盟收集整理)
  15. ollydbg打补丁
  16. char类型与字符编码
  17. 【论文写作】本科、硕士研究生毕业论文字体、段落格式参考
  18. Linux主机驱动与外设驱动分离思想[转宋老师]
  19. 交通大数据应用场景——高速落地检
  20. [词根词缀]fact/fug/fuse/词源知识F的内容

热门文章

  1. Mysql资料博文收藏
  2. echarts图表显示相关
  3. 上海计算机5年制大专学校,上海五年制大专学校排名
  4. win11壁纸被锁定更换不了 win11更换壁纸教程
  5. 我国计算机的最新进展,我国计算机最新进展
  6. 如何把拱门改成方形_闭气式方形拱门的制作方法
  7. appcomat_v7报错解决方案
  8. DENSE 数据集 - STF 数据集(CVPR 2020)
  9. autware.auto foxy
  10. win10神州网信+UOS双系统安装步骤