《Java设计模式之工厂模式》

  自己的博客之旅就从Java设计模式开始,记录和督促自己的学习!!!

 《一》工厂设计模式:

 1.工厂模式的三类

        1) 简单工厂模式

        2 )  工厂模式

        3 )  抽象工厂模式

  2.简单工厂模式

        又被称为静态工厂,如其名,这个模式非常简单,本质就是一个工厂类角色接收不同的参数返回不同的产品。该工厂类扮演的就是一个调度员的功能,又它来决定创建什么样的对象。

       简单工厂模式的组成:

  1)  工厂类角色 : 核心类,根据接收参数创建不同的产品类

 

public class CarFactory {
	public static Car createCar(String name){
		switch (name) {
		case "bmw":
			return new BmwCar();
		case "benz":
			return new BenzCar();
		default:
			return null;
		}
	}
}

  2)  抽象产品角色: 具体产品的公用接口或者抽象父类

public abstract class Car {
	public abstract void show();
}

 3)  具体产品角色:工厂类创建的产品实现类

 

public class BenzCar extends Car {
	@Override
	public void show() {
		System.out.println("这是奔驰");
	}
}
public class BmwCar extends Car{
	@Override
	public void show() {
		System.out.println("这是一辆宝马牌轿车");
	}
}

 

  从上面的例子可以看出,如果我们要新增一款车,那么就必须在工厂类的switch判断逻辑中增加代码,这样不符合Java的开闭原则,不易于扩展和维护,这要是简单工厂模式的一个致命缺点。

  3.工厂模式

工厂模式是对简单工厂模式的一种扩展,创建产品的工厂不再只是一个,而是由多个继承或实现了抽象工厂的具体工厂创建不同的产品。

      工厂模式的组成:

  1) 抽象工厂角色:所有具体工厂实现或继承的父抽象工厂

public interface CarFactory {
	Car creatCar();
}

  2) 具体工厂角色:创建具体实例的工厂,每一个都实现或继承了父抽象工厂

public class BenzFactory implements CarFactory {
	@Override
	public BenzCar creatCar() {
		return new BenzCar();
	}
}
public class BmwCarFactory implements CarFactory {
	@Override
	public BmwCar creatCar() {
		return new BmwCar();
	}
}

     3) 抽象产品角色:具体产品的公用接口或者抽象父类

public abstract class Car {
	public abstract void show();
}

     4) 具体产品角色 :具体工厂创建的实体类

public class BmwCar extends Car {
	@Override
	public void show() {
		System.out.println("这是宝马");
	}
}
public class BenzCar extends Car {
	@Override
	public void show() {
		System.out.println("这是奔驰");
	}
}

 工厂模式就是对简单工厂模式的扩展,用不同类型的具体工厂创建不同的产品,从而符合开闭原则,也更易于扩展,但是同样也存在一个问题:当

产品类型过于复杂造成工厂类也随之过于庞大,将引起类的爆增,非常不便于维护。

 

 

  4.抽象工厂模式

抽象工厂模式提供了创建一系列相关或相互依赖的对象,简单来说,工厂模式下的工厂只能创建一个产品,而抽象工厂模式下的工厂可以创建一个或多个产品,它针对的是有多个产品结构的产品。

 

 

  5.总结

(1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。不符合开闭原则,不易于扩展和维护。 
(2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。产品树过于复杂会造成类的暴增。 
(3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

   总而言之,这三类工厂设计模式没有优劣之分,都有自己对应的应用场景,有时候又可以搭配使用,工厂模式和抽象工厂模式也很容易相互转换。

 

 

 

     

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值