任何可以产生对象的方法或者类,都可以称之为工厂。单例就是所谓的静态工厂。

为什么jdk中有了new,还需要工厂呢?

  a、灵活的控制生产过程

  b、给对象加修饰、或者给对象加访问权限,或者能够在对象生产过程中添加一些日志信息,再或者根据应用场景添加一些实际的业务处理等等。

1、静态工厂

单例模式:一种特殊的静态工厂,请参考单例模式

2、简单工厂

/**
* 可移动的物体抽象接口
*/ 
public interface Moveble { }
/**
* 食品抽象类
*/
public abstract class Food{
}
/**
* 面包类
*/
public class bread extends Food {
public Bike(){
System.out.println("T am bread");
}
}
/**
* bike类
*/
public class Bike implements Moveble{
public Bike(){
System.out.println("T am bike");
}
}
/**
* car类
*/
public class Car implements Moveble{
public Car(){
System.out.println("I am car");
}
}
/**
* 简单工厂 只要是类都可以生产
*/
public class SimplerFactory {
public Moveble createCar(){
return new Car();
}
public Moveble createBike(){
return new Bike();
}
   public Food createBread(){
return new Bread();
}
}
/**
* 测试类
*/
public class T {
public static void main(String[] args) {
//生产car
Moveble car = new SimplerFactory().createCar();
//生产bike
Moveble bike = new SimplerFactory().createBike();
     //生产bike
Food bread = new SimplerFactory().createBread();
  }
}

3、工厂方法

/**
* 可移动的物体抽象接口
*/
public abstract interface Moveble {
} /**
* 食品抽象类
*/
public abstract class Food {
} /**
* bike类
*/
public class Bike implements Moveble{
public Bike(){
System.out.println("T am bike");
}
} /**
* car类
*/
public class Car implements Moveble{
public Car(){
System.out.println("I am car");
}
} /**
* bread类
*/
public class Bread extends Food{
public Bread(){
System.out.println("T am bread");
}
} /**
* bike工厂
*/
public class BikeFactory {
public Moveble create(){
return new Bike();
}
} /**
* car工厂
*/
public class CarFactory {
public Moveble create(){
return new Car();
}
} /**
* bread工厂
*/
public class BreadFactory {
public Food create(){
return new Bread();
}
} /**
* 测试类 ,工厂方法 一种类一个工厂
*/
public class T {
public static void main(String[] args) {
//生产car
Moveble car = new BikeFactory().create();
//生产bike
Moveble bike = new CarFactory().create();
//生产bread
Food bread = new BreadFactory().create();
}
}

4、抽象工厂

/**
* 食品抽象类
*/
public abstract class Food {
} /**
* 交通工具抽象类
*/
public abstract class Transportation {
} /**
* 电子设备抽象类
*/
public abstract class Electronic {
} /**
* bread类
*/
public class Bread extends Food {
public Bread(){
System.out.println("T am bread");
}
} /**
* plane类
*/
public class Plane extends Transportation{
public Plane(){
System.out.println("I am plane");
}
} /**
* phone类
*/
public class Phone extends Electronic{
public Phone(){
System.out.println("I am phone");
}
} /**
* 具体的工厂 可以生产一组类
*/
public class HaierFactory extends AbstractFactory{ Food createFood() {
return new Bread();
} Electronic createElectronic() {
return new Phone();
} Transportation createTransportation() {
return new Plane();
}
} /**
* cake类
*/
public class Cake extends Food {
public Cake(){
System.out.println("T am cake");
}
} /**
* Tank类
*/
public class Tank extends Transportation{
public Tank(){
System.out.println("I am tank");
}
} /**
* Computer类
*/
public class Computer extends Electronic{
public Computer(){
System.out.println("T am pc");
}
} /**
* 具体的工厂,可以生产一组类
*/
public class SuningFactory extends AbstractFactory{
Food createFood() {
return new Cake();
}
Electronic createElectronic() {
return new Computer();
}
Transportation createTransportation() {
return new Tank();
}
} /**
* 测试类,抽象工厂可以生产一组类,并且可以很灵活的扩展一组类的创建过程,但是不能做到灵活扩展一种类
*/
public class T {
public static void main(String[] args) {
//海尔工厂可以生产面包 飞机 手机
AbstractFactory haierFactory = new HaierFactory();
Food bread = haierFactory.createFood();
Transportation plane = haierFactory.createTransportation();
Electronic phone = haierFactory.createElectronic();
//苏宁工厂可以生产 蛋糕 坦克 pc电脑
AbstractFactory suningFactory = new SuningFactory();
Food cate = haierFactory.createFood();
Transportation tank = haierFactory.createTransportation();
Electronic computer = haierFactory.createElectronic();
}
}

5、Spring的bean工厂

既可以灵活控制一组类的创建过程也可以灵活控制一种类的创建过程,具体请去阅读Spring源码中的BeanFactory。

JAVA设计模式之工厂系列(factory)的更多相关文章

  1. Java设计模式:Simple Factory(简单工厂)模式

    概念定义 简单工厂(Simple Factory)模式,又称静态工厂方法(Static Factory Method)模式,即定义一个工厂类,根据传入的不同参数创建不同的产品实例,这些实例对象具有共同 ...

  2. Java设计模式:Abstract Factory(抽象工厂)模式

    概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...

  3. java设计模式解析(11) Chain责任链模式

    设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析(4) ...

  4. java设计模式解析(1) Observer观察者模式

      设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...

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

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

  6. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  7. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

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

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  9. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

随机推荐

  1. 【Server】Windows系统安装Tomcat服务器

    安装Tomcat服务器 Tomcat服务器地址:https://tomcat.apache.org/download-80.cgi 当前版本点选8以上版本,最新的可能不稳定,所以选8或者9版本 直接解 ...

  2. Daily Scrum 12/17/2015

    Process: Zhaoyang:完成了相册图片的异步加载. Yandong&Dong:   对Azure的体系架构进行学习和相应的编程. Fuchen:   对Oxford计划中的NLP接 ...

  3. 提高万恶的KPI,切忌要避开这六个低效的编程习惯

    作者:程序员小跃 Slogan:当你的才华还无法撑起你的野心时,那应该静下心来好好学习 上次的翻译,引起了很大的反响,大家都想知道自己和高级工程师的差距,看了我的文章,是不是都在默默地做着比较呢?如果 ...

  4. 使用jquery清空input 文本框中的内容

    只需要将文本框的值置为空即可: function resetBtn(){ $("#name").val(""); }

  5. 再接再厉,JSONViewer现已支持Firefox、Microsoft Edge、360浏览器,可能是最好用的JSON格式化工具

    之前写的JSONViewer,截至目前在谷歌商店里已经有1000+的自然下载量了 为什么开发JSONViewer? 日常开发中,拿到接口输出的JSON一般会去在线的JSON格式化网站查看,但是在线格式 ...

  6. mysql创建存储过程及调用

    创建存储过程简单示例: DELIMITER //CREATE PROCEDURE ccgc()BEGINSELECT * FROM TEXT;SELECT * FROM s_user;END//DEL ...

  7. python-用户输入和while循环

    函数input() 比较大小要同类型: age=iput() 21 age=int(age) age>=10 true prompt = "If you tell us who you ...

  8. word2sequence 把字符串转换数字编码

    地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的评论数据,其中训练集25000条,测试集25000条. 1.准备数据 d ...

  9. 大数据hbase分布式安装及其部署。

    大数据hbase分布式安装及其部署. 首先要启动Hadoop以及zookeeper,可以参考前面发布的文章. 将hbase的包上传至master节点 这里我使用的是1.3.6的版本,具体的根据自己的版 ...

  10. php 对象的调用和引入

    直接上实例: 定义: <?php namespace app\php; class a { ; public function index() { echo "; } static f ...