Java设计模式之工厂模式、抽象工厂模式

本文详细介绍了工厂模式、工厂方法模式及抽象工厂模式的概念、特点及应用场景,并通过实例代码展示了三种模式的具体实现方式。

在面向对象编程的程序设计中,我们最常见的操作就是new对象,但在创建一个新对象的过程中,会有一些问题,比如我们需要注意创建新对象的实现细节,初始化一些必要的参数等。这样会让我们在讲更多的心思放在对象的创建上,而不是程序逻辑的实现上,严重拖延了我们的程序开发效率。工厂模式和抽象工厂模式的出现则完美解决了这个问题,让我们不再关心对象的创建,更多的在重心放在业务的实现上。

特点:

    1、程序员直接通过工厂方法创建对象,不再关注创建对象的细节。

    2、隐藏对象的实现细节,也有利于程序的安全性。

    3、降低程序耦合度。

企业级开发和常见框架中的应用:

    Hibernate中的sessionfactory等

工厂模式分类:

简单工厂模式,程序开发中最常用的形式,具体代码如下:

public class Demo {

	/**
	 * demo这个类就是我们平时的操作类,在这个类中我们不用去关心 创建汽车的实现细节
	 */
	public static void main(String[] args) {
		Car car = CarFactory.createCar("dz");
		car.run();
		Car car2 = CarFactory.createCar("at");
		car2.run();
	}
}
interface Car{
	public void run();
}

class Dz implements Car{
	public void run() {
		System.out.println("大众汽车在跑");	
	}
}

class At implements Car{
	public void run() {
		System.out.println("奥拓汽车在跑");
	}
}

class CarFactory{
	public static Car createCar(String type){
		if("dz".equals(type)){
			System.out.println("创建了一个大众车");
			return new Dz();
		}
		if("at".equals(type)){
			System.out.println("创建了一个奥拓车");
			return new At();
		}
		return null;
	}
}

工厂方法模式,相比于简单工厂模式,方便扩展,不必去修改以前的代码

public class Demo {

	/**
	 * demo这个类就是我们平时的操作类,在这个类中我们不用去关心 创建汽车的实现细节
	 */
	public static void main(String[] args) {
		AtFactory atFactory = new AtFactory();
		DzFactory dzFactory = new DzFactory();
		Car at = atFactory.createCar();
		Car dz = dzFactory.createCar();
		at.run();
		dz.run();
	}
}

interface Car {
	public void run();
}

class Dz implements Car {
	public void run() {
		System.out.println("大众汽车在跑");
	}
}

class At implements Car {
	public void run() {
		System.out.println("奥拓汽车在跑");
	}
}

interface CarFactory {
	Car createCar();
}

class DzFactory implements CarFactory {
	public Car createCar() {
		return new Dz();
	}
}

class AtFactory implements CarFactory {
	public Car createCar() {
		return new At();
	}
}

抽象工厂方法模式:

public class Demo {

	public static void main(String[] args) {
		Car carFactory = new GDCarFactory();
		FDZ fdz = carFactory.createFdz();
		fdz.zhuansu();
	}
}

interface FDZ {
	void zhuansu();
}

class GDFDZ implements FDZ {
	public void zhuansu() {
		System.out.println("高端发动机转速快");
	}
}

class DDFDZ implements FDZ {

	public void zhuansu() {
		System.out.println("低端发动机转速慢");
	}

}

interface ZY {
	void shushidu();
}

class GDZY implements ZY {

	public void shushidu() {
		System.out.println("高端座椅很舒适");
	}

}

class DDZY implements ZY {

	public void shushidu() {
		System.out.println("低端座椅不舒适");
	}

}

interface LT {
	void mosundu();
}

class GDLT implements LT {

	public void mosundu() {
		System.out.println("高端轮胎不磨损");
	}

}

class DDLT implements LT {

	public void mosundu() {
		System.out.println("低端轮胎磨损快");
	}

}

interface Car {
	FDZ createFdz();

	ZY createZy();

	LT createLt();
}

class GDCarFactory implements Car{

	@Override
	public FDZ createFdz() {
		return new GDFDZ();
	}

	@Override
	public ZY createZy() {
		return new GDZY();
	}

	@Override
	public LT createLt() {
		return new GDLT();
	}
	
}

class DDCarFactory implements Car{

	@Override
	public FDZ createFdz() {
		return new DDFDZ();
	}

	@Override
	public ZY createZy() {
		return new DDZY();
	}

	@Override
	public LT createLt() {
		return new DDLT();
	}
	
}

三种方法的比较:

1、简单工厂模式:简单工厂模式设计简单,代码量少,但是可扩展性却很差,需要扩展时需要修改以前的代码

2、工厂方法模式:扩展性强,但增加了代码复杂度

3、抽象工厂模式:抽象工厂模式和工厂模式是不同,抽象工厂模式是对产品分等级,但工厂模式是对产品分类,举个汽车的例子:工厂模式是生产不同品种的汽车,比如奥迪和大众,而抽象工厂模式则是对同一款汽车进行等级划分,比如同样都是大众汽车,我们分了高端车和低端车。从方法上讲抽象工厂模式更像是工厂模式的细化。一个针对的不不同产品,一个针对的是同一个产品家族。

转载于:https://my.oschina.net/jiaoy/blog/731401

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值