工厂方法模式

工厂方法模式属于创建型模式。它是简单工厂模式的延伸,它继承了简单工厂模式的优点,同时还弥补了简单工厂模式的缺陷,更好的符合“开闭原则”的要求。当我们添加一个新的产品对象的时候,不需要对已有系统做任何修改,只需要添加一个新的产品类和新的工厂。

将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。

定义:在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

在工厂方法模式中,具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。

举例
我们都知道电视机有很多品牌,如果我们按照原先的简单工厂模式,那么每一次我们添加新的电视机品牌时,我们都需要修改工厂类中的代码。如果我们采用工厂方法模式,只需添加一个新的电视机品牌工厂,实现工厂父类TVFactory中的方法即可,无需改动原来的代码。类与类之间的关系图如下:
在这里插入图片描述
代码如下:
TV.java

public abstract class TV {
	abstract void play();
}

HaierTV.java

public class HaierTV extends TV {

	@Override
	void play() {
		System.out.println("海尔电视");
	}

}

MediaTV.java

public class MediaTV extends TV {

	@Override
	void play() {
		System.out.println("美的电视");
	}

}

TVFactory.java

public abstract class TVFactory {
	abstract TV produce();
}

HaierTVFactory.java

public class HaierTVFactory extends TVFactory {

	@Override
	TV produce() {
		return new HaierTV();
	}

}

MediaTVFactory.java

public class MediaTVFactory extends TVFactory {

	@Override
	TV produce() {
		return new MediaTV();
	}

}

测试:

public class Main {

	public static void main(String[] args) {
		TVFactory tvFactory=new HaierTVFactory();
		TV Haier = tvFactory.produce();
		Haier.play();	//海尔电视
		tvFactory=new MediaTVFactory();
		TV Media = tvFactory.produce();
		Media.play();	//美的电视
	}

}

如果我们需要添加新的电视机品牌,只需添加如下如下代码,不需要修改源代码:
NewTV.java

public class NewTV extends TV {

	@Override
	void play() {
		System.out.println("新的电视");
	}

}

NewTVFactory.java

public class NewTVFactory extends TVFactory {

	@Override
	TV produce() {
		return new NewTV();
	}

}

结论
使用工厂方法模式遵循了开闭原则。但在增加新产品的时候需要增加一个新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值