JAVA设计模式之工厂系列(factory)
任何可以产生对象的方法或者类,都可以称之为工厂。单例就是所谓的静态工厂。
为什么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)的更多相关文章
- Java设计模式:Simple Factory(简单工厂)模式
概念定义 简单工厂(Simple Factory)模式,又称静态工厂方法(Static Factory Method)模式,即定义一个工厂类,根据传入的不同参数创建不同的产品实例,这些实例对象具有共同 ...
- Java设计模式:Abstract Factory(抽象工厂)模式
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...
- java设计模式解析(11) Chain责任链模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析(4) ...
- java设计模式解析(1) Observer观察者模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
随机推荐
- 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...
- 最长公共子窜和最长公共子序列(LCS)
他们都是用dp做;复杂度都是O(N方) 有一个大佬的博客写的很详细,是关于最长公共子序列的:https://blog.csdn.net/hrn1216/article/details/51534607 ...
- EFCore.Sharding(EFCore开源分表框架)
EFCore.Sharding(EFCore开源分表框架) 简介 引言 开始 准备 配置 使用 按时间自动分表 性能测试 其它简单操作(非Sharing) 总结 简介 本框架旨在为EF Core提供S ...
- Redisson 实现分布式锁的原理分析
写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题. 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有一个进程在持有锁的期间崩溃而未能主动释放锁, ...
- Django编写自定义manage.py 命令
官网文档地址:编写自定义 django-admin 命令 金句: 你所浪费的今天,正是昨天死的人所期待的明天. 开篇话: python manage.py <command> 的命令我们用 ...
- Hadoop的下载和安装
Hadoop的下载和安装 一:Hadoop的简介 Apache的Hadoop是一个开源的.可靠的.可扩展的系统架构,可利用分布式架构来存储海量数据,以及实现分布式的计算. Hadoop许使用简单的编程 ...
- ES6中的let关键字,有什么用呢?
来吧,开始本节的学习! ES6 给开发者带来很多令人激动的特性,其中let关键字就是其中之一. 那么,let关键字是什么东西? let 的用途 我们回想一下,我们平时在写代码的时候,用var来声明一个 ...
- [Python进阶].pyc的那点事
1. 什么是 .pyc文件 .pyc文件 就是 Python的字节码(byte-compiled)文件..py文件运行时,python会自动将其编译成PyCodeObject并写入.pyc文件,再有p ...
- 2019-2020-1 20199328《Linux内核原理与分析》第八周作业
笔记部分 2019/11/4 17:55:22 elf文件代码默认加载到0x8048000,然后是一段首部信息,然后到达程序的真实入口 正常的系统调用会先进入内核态->用户态->系统调用下 ...
- Spring Boot中的Properties
文章目录 简介 使用注解注册一个Properties文件 使用属性文件 Spring Boot中的属性文件 @ConfigurationProperties yaml文件 Properties环境变量 ...