三大工厂模式

  1. 前文
    网上工厂模式的代码很多了,今天在看了一些博文后,我发了一个问题,在项目中实际上运到到的地方很多,但是又感觉自己对这个有所欠缺,所以今晚在这里记录一下,希望大家可以一起交流一下,刚开始对博客怎么写也没有太在意,就是想利用碎片时间记录一下自己的一些感受和心得,希望可以跟大家一起交流。
    工厂模式有三种,简单工厂,工厂方法和抽象工厂。
    其中简单工厂和工厂方法很好理解,抽象工厂要绕一点。
    工厂的作用就是生产,以前我们通过new对象出来,现在我们通过一个工厂生产我们想要的,底层也是new。我觉得你们肯定刚开始想的跟我一样,为啥不直接new还要搞个工厂,这就是太年轻了啊。
    利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。将实现类和创建对象一起管理,降低系统的耦合度。
    简单工厂中工厂集聚了所有类的创建,对于高类聚是种破坏,但是简单工厂目的性很强,知道该创建什么。


工厂方法模式,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是负责创建具体的工厂,将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
在这里插入图片描述
在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。

我们来具体说一说抽象工厂模式。
抽象工厂就好像是一个产品的组合,简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。
在这里插入图片描述
由上图我们可以知道,抽象工厂不再生产,而是交给了具体的工厂。

public interface  Engine{
		void run()
}
public class EngineA implements Engine{
		public void run(){
		 System.out.println("A转的快!");
}
}
public class EngineB implements Engine{
		public void run(){
		 System.out.println("B转的慢!");
}
}
public interface Tyre {
		void add()
}
public class TyreA implements Tyre{
		public void add(){
		 System.out.println("A轮胎跑得快!");
}
}
public class TyreB implements Tyre{
		public void add(){
		 System.out.println("B轮胎跑得慢!");
}
}

public interface CarFactory {
	
	Engine createEngine();

	Tyre createTyre();
}


public class BMWFactory implements  CarFactory{
    Engine createEngine(){
			return new EngineA();
}

	Tyre createTyre(){
			return new TyreA();
}

}

public class AudiFactory implements  CarFactory{
    Engine createEngine(){
			return new EngineB();
}

	Tyre createTyre(){
			return new TyreB();
}

}

抽象工厂模式封装了产品的创建,使得不需要知道具体是哪种产品,只需要知道是哪个工厂就行了,比如我们要一辆BWM,我们只要宝马工厂就行了,问具体每个类的实现我们不用去理会。
可以支持不同类型的产品,使得模式灵活性更强,可拓展性比较强。
可以非常方便的使用一族中间的不同类型的产品。
但是你们有没有发现,代码是不是太过于冗余了,而且每次增加一个产品,工厂都要改,所以抽象工厂适合扩展产品族,而不是产品。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值