浅识JAVA设计模式——工厂模式(一)

版权声明:本文为 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_来写,那样更好理解,这里给出这种写法,也是自己想锻炼一下。 ###总结 这里只讲了前两种,至于抽象工厂,后续更新。简单工厂和工厂方法区别在于,一个用工厂创建对象,一个用工厂创建单一产品工厂在创建对象。 ###参考 工厂方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值