抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:具体的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现具体功能,或派生
类图
1. //抽象产品1
2. public interface IProduct1 {
3. public void show();
4. }
1. //抽象产品2
2. public interface IProduct2 {
3. public void show();
4. }
1. //实体产品1
2. public class Product1 implements IProduct1 {
3. public void show() {
4. "创建了1型产品");
5. }
6. }
1. //实体产品2
2. public class Product2 implements IProduct2 {
3. public void show() {
4. "创建了2型产品");
5. }
6. }
1. /*
2. * 1A 1B属于Product1 同一产品等级结构中
3. * 2A 2B属于Product2
4. */
5. public class GradeProduct1A extends Product1 {
6.
7. @Override
8. public void show() {
9. super.show();
10. "这是产品1下的:产品A");
11. }
12.
13. }
1. public class GradeProduct1B extends Product1 {
2.
3. @Override
4. public void show() {
5. super.show();
6. "这是产品1下的:产品B");
7. }
8. }
1. public class GradeProduct2A extends Product2 {
2.
3. @Override
4. public void show() {
5. super.show();
6. "这是产品2下的:产品A");
7. }
8. }
1. public class GradeProduct2B extends Product2 {
2.
3. @Override
4. public void show() {
5. super.show();
6. "这是产品2下的:产品B");
7. }
8. }
1. //抽象工厂 创建不同的抽象产品
2. public interface IFactory {
3. public IProduct1 createProduct1A();//1类产品 型号A
4. public IProduct1 createProduct1B();//1类产品 型号B
5. public IProduct2 createProduct2A();//2类产品 型号A
6. public IProduct2 createProduct2B();//2类产品 型号B
7. }
1. //实体工厂 创建实体产品,返回类型为抽象产品
2. public class Factory implements IFactory {
3.
4. public IProduct1 createProduct1A() {
5. return new GradeProduct1A();
6. }
7.
8. public IProduct1 createProduct1B() {
9. return new GradeProduct1B();
10. }
11.
12. public IProduct2 createProduct2A() {
13. return new GradeProduct2A();
14. }
15.
16. public IProduct2 createProduct2B() {
17. return new GradeProduct2B();
18. }
19. }
1. /*
2. * 抽象工厂模式:用来创建一组相关或者相互依赖的对象
3. *
4. * 流程:抽象工厂,实体工厂 生产产品
5. * 抽象产品,实体产品 实现产品功能
6. * 缺点:当需要增加一个产品(由抽象和实体构成),工厂都需要更改
7. */
8. public class Test4Abstract {
9. public static void main(String[] args) {
10. new Factory();
11. IProduct1 product1a = factory.createProduct1A();
12. product1a.show();
13. IProduct1 product1b = factory.createProduct1B();
14. product1b.show();
15.
16. IProduct2 product2a = factory.createProduct2A();
17. product2a.show();
18. IProduct2 product2b = factory.createProduct2B();
19. product2b.show();
20. }
21. }