简单工厂模式,工厂模式,抽象工厂模式

今天在看电子书时,突然忘记了工厂模式的几种形式,不用也忘得快,尽快复习下喽。。。

工厂模式有三种,简单工厂模式,工厂模式,抽象工厂模式


1.简单工厂模式:

简单将产品的制造进行封装,不分类别只是简单的 工厂和产品的依赖关系

       具体要素: 工厂(静态工厂方法),抽象产品,具体产品


当然按照一般写法是将 产品进行抽象,不过实际开发中多变通  具体下面一个例子实现下简单工厂

interface Car{
	void run();
}

class Bwm524 implements Car{

	@Override
	public void run() {
		System.out.println("524...run");
	}
	
}
class Bwm530 implements Car{

	@Override
	public void run() {
		System.out.println("530...run");
	}
}

class Factroy{
	public static Car getCar(String car){
		if(car.equals("524")){
			return new Bwm524();
		}else if(car.equals("530")){
			return new Bwm530();
		}else{
			throw new RuntimeException("---");
		}
	}

2.工厂模式:简单工厂模式存在缺陷,如果产品不断地添加,那么就得在工厂方法中添加对应的代码来实现,可扩展性不高,那么就应运而生了工厂模式,简单理解,工厂模式就是对每一个(类)产品做一个具体的工厂类,也就是说 把产品具体的生成交给了对应的工厂类,而不是像简单工厂那样统一生产。

具体要素:抽象工厂类,具体工厂类,抽象产品,具体产品


示例代码:

interface Car1{
	void run();
}

class Bwm implements Car1{

	@Override
	public void run() {
		System.out.println("524...run");
	}
	
}

class Audi implements Car1{

	@Override
	public void run() {
		System.out.println("q1...run");
	}
	
}

interface Factroy1{
	Car1 createCar(String name);
}
/**
 * 宝马汽车制造工厂
 * @author zhousongqiao
 *
 */
class BwmFactory1 implements Factroy1{

	@Override
	public Car1 createCar(String name) {
		return new Bwm();
	}

}
/**
 * 奥迪汽车制造工厂
 * @author zhousongqiao
 *
 */
class AudiFactory1 implements Factroy1{

	@Override
	public Car1 createCar(String name) {
		return new Audi();
	}

}

3.抽象工厂模式:但是现实生成中不难发现,有些工厂即生产A产品,有生产B产品,可能FA工厂生产的A1和A2中A1产品质量好,FB工厂生产的B1和B2中B2质量比较好,为了追求质量好,那么有些时候就需要FA工厂的A1产品和FB工厂的B2产品。明显,按照上述,工厂模式已经不再适应这种场景,进而需要对产品进行继续抽象,并且需要改造抽象的工厂方法,以便具体的工厂能实现多个产品的生产

抽象工厂模式要素: 抽象工厂,具体工厂,抽象产品(多个),具体产品(多个)【没有用工具画图---见谅】


代码示例:

/**
 * 汽车抽象
 * @author zhousongqiao
 *
 */
interface Car2{
	void run();
}

class Bwm524_2 implements Car2{

	@Override
	public void run() {
		System.out.println("524...run");
	}
	
}
class Bwm530_2 implements Car2{

	@Override
	public void run() {
		System.out.println("530...run");
	}
}

class AudiQ1_2 implements Car2{

	@Override
	public void run() {
		System.out.println("q1...run");
	}
	
}
class AudoQ7_2 implements Car2{

	@Override
	public void run() {
		System.out.println("q7...run");
	}
}

/**
 * 汽车制造工厂
 * @author zhousongqiao
 *
 */
interface Factroy2{
	Car2 createBmwCar(String name);
	Car2 createAudiCar(String name);
}

/**
 * 低品质汽车
 * @author zhousongqiao
 *
 */
class LowLeverCarFactory implements Factroy2{

	@Override
	public Car2 createBmwCar(String name) {
		return new Bwm524_2();
	}

	@Override
	public Car2 createAudiCar(String name) {
		return new AudiQ1_2();
	}
	
}
/**
 * 高品质汽车
 * @author zhousongqiao
 *
 */
class HighLeverCarFactory implements Factroy2{

	@Override
	public Car2 createBmwCar(String name) {
		return new Bwm530_2();
	}

	@Override
	public Car2 createAudiCar(String name) {
		return new AudoQ7_2();
	}
	
}

工厂模式的这三种形式经常容易混淆,具体也就会在一般面试中遇到过,具体一般写代码,能达到“唯手熟尔”的境界就可以了,没必要较真这个。。。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值