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实现)(13)常见数据结构-可变长数组
可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...
- Continue 和 Break
1.什么是continue和break continue:继续的.持续的 break:冲断的.折断的 作用:用于终止循环体,主要用于switch条件语句和循环体条件语句(for.while.do-wh ...
- 如何用python批量生成真实的手机号码
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Python测试社区 1目 标 场 景 平时在工作过程中,偶尔会需要大 ...
- Java 8 到 Java 14,改变了哪些你写代码的方式?
前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...
- Flair:一款简单但技术先进的NLP库
过去的几年里,在NLP(自然语言处理)领域,我们已经见证了多项令人难以置信的突破,如ULMFiT.ELMo.Facebook的PyText以及谷歌的BERT等等. 这些技术大大推进了NLP的前沿性研究 ...
- 使用 PyHamcrest 执行健壮的单元测试
在 测试金字塔 的底部是单元测试.单元测试每次只测试一个代码单元,通常是一个函数或方法. 通常,设计单个单元测试是为了测试通过一个函数或特定分支的特定执行流程,这使得将失败的单元测试和导致失败的 bu ...
- 列表按钮功能的设置和DOM的使用
HTML: <foreach name="fulltime_list" item="v"> <tr> <td></td ...
- influxdb 安装
influxdb是一款开源的时序数据库,可以用作监控系统的数据存储或用来存储基于时序进行分析的业务系统的数据存储. influxdb的部署及使用均比较简单,但是集群(官方版集群已闭源)及高可用方案较少 ...
- python字符串 提取括号中的内容
返回值是一个列表 re.findall(r'[(](.*?)[)]', str1)
- Scala教程之:可变和不变集合
文章目录 mutable HashMap immutable HashMap 集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力.在scala中集合主要在三个包里面:scala.coll ...