抽象工厂模式

@

一、概述

抽象工厂模式也是属于设计模式中的创建型模式,用于产品族的构建,抽象工厂模式是所有形态的工厂模式中最为具有一般性的一种形态。抽象工厂是指当有多个角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,是客户端在不必指定产品的具体情况下,创建多个产品族的产品对象。

二、模式结构图

在这里插入图片描述

三、Java代码实现

还是以水果举例首先我们要分别创建水果接口和水果工厂接口

package 抽象工厂模式;

public interface Fruit {
//	生产水果-接口
	public void get();
}
package 抽象工厂模式;

public interface FruitFactory {
	public Fruit getApple();
	public Fruit getBanana();
}

创建具体水果的抽象类,让具体水果抽象类实现水果接口

package 抽象工厂模式;

public abstract class Apple implements Fruit{
//	苹果抽象类
	public abstract void get();
}
package 抽象工厂模式;

public abstract class Banana implements Fruit{
//	香蕉抽象类
	public abstract void get();
}

创建具体的水果类,每个水果都分为A、B两个等级。

package 抽象工厂模式;
//Apple_A 继承Apple
public class Apple_A extends Apple{
	@Override
	public void get() {
		System.out.println("生产A级-苹果");
	}
}
package 抽象工厂模式;
// Apple_B继承Apple类
public class Apple_B extends Apple{
	@Override
	public void get() {
		System.out.println("生产B级-苹果");
	}
}

分别创建生产A级水果和B级水果的A类工厂和B类工厂,并实现工厂接口

package 抽象工厂模式;
//	FruitFactory_calssA 要去实现 FruitFactory
public class FruitFactory_calssA implements FruitFactory{
//  A级水果工厂只生产A级水果
	@Override
	public Fruit getApple() {
//		生产A级苹果
		return new Apple_A();
	}

	@Override
	public Fruit getBanana() {
//		生产A级香蕉
		return new Banana_A();
	}

}
public class FruitFactory_calssB implements FruitFactory{
//   B级水果工厂只生产B级水果
	@Override
	public Fruit getApple() {
//		生产B级苹果
		return new Apple_B();
	}

	@Override
	public Fruit getBanana() {
//		生产B级香蕉
		return new Banana_B();
	}

}

调用演示*

package 抽象工厂模式;

public class test {
public static void main(String[] args) {

	FruitFactory f1 = new FruitFactory_calssA();
	FruitFactory f2 = new FruitFactory_calssB();
//	Apple
	Fruit apple_A = f1.getApple();
	apple_A.get();
	Fruit apple_B= f2.getApple();
	apple_B.get();
// 	Banana
	Fruit banana_A = f1.getBanana();
	banana_A.get();
	Fruit banana_B = f2.getBanana();
	banana_B.get();
}
}

在这里插入图片描述

四、工厂方法模式和抽象工厂模式比较

工厂方法模式中的每一个形态都是针对一定的问题的解决方案,针对的是多个产品系列结构;而抽象工厂模式针对的是多个产品族结构,一个产品内有多个产品系列。

posted @ 2020-03-29 14:17  GaoYang-笔迹  阅读(734)  评论(0编辑  收藏  举报