博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅识JAVA设计模式——工厂模式(一)
阅读量:6698 次
发布时间:2019-06-25

本文共 2888 字,大约阅读时间需要 9 分钟。

版权声明:本文为 Codeagles 原创文章,可以随意转载,但必须在明确位置注明出处!!!

###工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。看到这个名字不难想象到我们要做什么,当然就是创造工厂,那么工厂是干什么的?当然是生产创造用的了,生产什么呢?JAVA中一切万物皆对象,工厂用来生产对象。 工厂模式通常分为:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

想要用工厂模式,那就要知道这么几个问题:

  • 为什么要用
  • 有什么好处
  • 有什么坏处
  • 怎么用

OK,其他的细枝末节先不深入,先搞懂这几个问题就好了,深入的随着理解和实践,认知也会越来越深入的。 首先,为什么要用? 我们知道设计模式无疑就是通过经验来总结出比较合理的代码结构,目的也很明确,挂在嘴边的高内聚、低耦合,设计模式为了解耦,代码更合理。 有什么好处呢?

  • 扩展性高
  • 让调用者只用接口,而不去注重内部实现
  • 当然最好的就是,调用者只需要知道对象名字就可以,不需要关注怎么创建。(创建由子类进行)

有什么坏处呢? 相对也是显而易见的,每次增加一个需求或者说产品,都要对应增加一个对象工厂以及实例类,如果系统很大,那么类个数是巨多的,无疑维护成本提升了。 那么,最后一个问题怎么用? ####Talk is cheap, show me the code. ####简单工厂

package design;  //抽象机器abstract class Mechine {	public abstract void move();	public abstract void stop();}  // 抽象机器实例——汽车class Car extends Mechine {	@Override	public void move() {		System.out.println("汽车正以80迈速度驶过来。。。");	}	@Override	public void stop() {		System.out.println("一脚急刹车,滑行20米停下来了。。");	}  }  // 抽象机器实例——飞机  class Airplane extends Mechine {	@Override	public void move() {		System.out.println("飞机正在起飞。。。");	}	@Override	public void stop() {		System.out.println("飞机准备降落。。。");	}  }复制代码
//简单工厂public class MechineFactory {	public static Mechine createMechine(String mechineName) {		Mechine mechine = null;		if(mechineName.equals("car")){			mechine= new Car();		}		if(mechineName.equals("airplane")){			mechine= new Airplane();		}		return mechine;	}}复制代码
public class Boss {	public static void main(String[] args) {		// Boss下令“我要造一辆轿车,现在马上!会动的!”		// 机器工厂接到指令,立即开始做ing。。。		Mechine mechine = MechineFactory.createMechine("car");		mechine.move();		//Boss:"我好几个亿的生产线不能这么放着,造一辆飞机,会飞会降落的"		mechine = MechineFactory.createMechine("airplane");		mechine.move();		mechine.stop();	}  }复制代码

这就是简单工厂,那么工厂方法模式,其实是简单工厂的扩展,说白了就是简单工厂抽象化。 ####工厂方法模式

package design;  //抽象机器abstract class Mechine {	public abstract void move();	public abstract void stop();}  // 抽象机器实例——汽车class Car extends Mechine {	@Override	public void move() {		System.out.println("汽车正以80迈速度驶过来。。。");	}	@Override	public void stop() {		System.out.println("一脚急刹车,滑行20米停下来了。。");	}  }  // 抽象机器实例——飞机  class Airplane extends Mechine {	@Override	public void move() {		System.out.println("飞机正在起飞。。。");	}	@Override	public void stop() {		System.out.println("飞机准备降落。。。");	}  }复制代码

//简单工厂抽象化abstract class MechineFactory {	public abstract  Mechine createMechine(String mechineName);}//汽车工厂--只负责创建汽车public class CarFactory extends MechineFactory{	@Override	public Mechine createMechine(String mechineName) {		return new Car();	}}public class Boss {	public static void main(String[] args) {		// Boss下令“我要造一辆轿车,现在马上!会动的!”		// 机器工厂接到指令,立即开始做         MechineFactory mf = new CarFactory();		Mechine m=mf.createMechine("car");		m.move();	}}复制代码

show完code是不是有点概念了,当然模式只是模式,还有很多种写法,只要是这种思想就可以,比如还可用接口_implement_来写,那样更好理解,这里给出这种写法,也是自己想锻炼一下。 ###总结 这里只讲了前两种,至于抽象工厂,后续更新。简单工厂和工厂方法区别在于,一个用工厂创建对象,一个用工厂创建单一产品工厂在创建对象。 ###参考

转载于:https://juejin.im/post/5b440ba3f265da0f7006f40c

你可能感兴趣的文章
HAProxy用法详解 全网最详细中文文档
查看>>
查看及修改MYSQL最大连接数
查看>>
shell循环结构之while循环
查看>>
重复编辑命令行
查看>>
Saltstack 报错 python-crypto randomPool_DeprecationWarning:
查看>>
UITableView 重用cell方法edequeueReusableCellWithIdentifier,出现错误
查看>>
匿名包装器(function(){})()
查看>>
我的友情链接
查看>>
Cisco 3560 配置DHCP Relay实例
查看>>
四元數與旋轉
查看>>
unbuntu使用经典界面
查看>>
开始nodejs+express的学习+实践(8)
查看>>
通过VB向SQL Server数据库中录入数据
查看>>
读取properties
查看>>
H3C s5500-SI-EI系列交换机 WEB界面登录配置
查看>>
前端测试利器--Browser-Sync启动命令
查看>>
我的友情链接
查看>>
电脑无法启动故障的10种解决方法
查看>>
云计算-从基础到应用架构系列-云计算的演进
查看>>
软件开发中的11个系统思维定律
查看>>