JAVA设计模式(抽象工厂模式)

抽象工厂模式(Abstract factory pattern)提供了一系列相关或者相互依赖的对象的接口,关键字是“一系列”。
优点:
1、具体产品从客户端代码中抽离出来,解耦。
2、将一个系列的产品族统一到一起创建。
缺点:
拓展新的功能困难,需要修改抽象工厂的接口;
综上所述,抽象工厂模式适合那些功能相对固定的产品族的创建。
举例:
1、新建水果抽象类Fruit,包含buy抽象方法:

public abstract class Fruit {

	public abstract void buy();
}

2、新建价格抽象类Price,包含pay抽象方法:

public abstract class Price {

	public abstract void pay();
}

3、新建水果创建工厂接口FruitFactory,包含获取水果和价格抽象方法(产品族的体现是,一组产品包含水果和对应的价格):

public interface FruitFactory {

	Fruit getFruit();

	Price getPrice();
}

4、接下来开始创建苹果这个“产品族”。
(1)新建Fruit实现类AppleFruit:

public class AppleFruit extends Fruit {

	@Override
	public void buy() {
		System.out.println("買蘋果");
	}

}

(2)新建对应的苹果价格实现ApplePrice:

public class ApplePrice extends Price {

	@Override
	public void pay() {
		System.out.println("蘋果單價兩元");
	}

}

5、新建FruitFactory的实现类AppleFruitFactory,包括:

public class AppleFruitFactory implements FruitFactory {

	@Override
	public Fruit getFruit() {
		return new AppleFruit();
	}

	@Override
	public Price getPrice() {
		return new ApplePrice();
	}

}

6、创建客户端Application,测试一波:

import com.fiber.wipe.Abstractfactorymode.dao.AppleFruitFactory;
import com.fiber.wipe.Abstractfactorymode.dao.FruitFactory;

public class TestApplication {

	public static void main(String[] args) {

		FruitFactory appleFruitFactory = new AppleFruitFactory();
		appleFruitFactory.getFruit().buy();
		appleFruitFactory.getPrice().pay();
	}
}

7、结构:
在这里插入图片描述
8、UML展示
在这里插入图片描述
9、

客户端只需要通过创建AppleFruitFactory就可以获得苹果这个产品族的所有内容,包括苹果对象,苹果价格。要新建香蕉的产品族,只需要实现FruitFactory、Price和Fruit接口即可。这种模式的缺点和工厂方法差不多,就是类的个数容易过多,增加复杂度。

public class BananaFruit extends Fruit {

	@Override
	public void buy() {
		System.out.println("買香蕉");
	}

}
public class BananaPrice extends Price {

	@Override
	public void pay() {
		System.out.println("香蕉單價一元");
	}

}
public class BananaFruitFactory implements FruitFactory {

	@Override
	public Fruit getFruit() {
		return new BananaFruit();
	}

	@Override
	public Price getPrice() {
		return new BananaPrice();
	}

}
import com.fiber.wipe.Abstractfactorymode.dao.AppleFruitFactory;
import com.fiber.wipe.Abstractfactorymode.dao.BananaFruitFactory;
import com.fiber.wipe.Abstractfactorymode.dao.FruitFactory;

public class TestApplication {

	public static void main(String[] args) {

		FruitFactory appleFruitFactory = new AppleFruitFactory();
		appleFruitFactory.getFruit().buy();
		appleFruitFactory.getPrice().pay();

		FruitFactory bananaFruitFactory = new BananaFruitFactory();
		bananaFruitFactory.getFruit().buy();
		bananaFruitFactory.getPrice().pay();
	}
}

10、结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值