我对于抽象工厂模式的理解

首先 ,想要理解抽象工厂模式首先要理解简单工厂模式和工厂模式!

概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
有以下角色组成:
抽象工厂类
具体工厂类
抽象产品类
具体产品类
与工厂方法的区别在于:
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

注意一点:在写代码的时候围绕着抽象工厂的四个角色进行,所有的类中除了客户的输出类外必然属于四个角色中的一个:
抽象工厂类
具体工厂类
抽象产品类
具体产品类

若是理解完之后咋们直接上代码:

抽象工厂测试:

目前有以下两个个品牌 nike adidas

大家都有 衣服(clothes)和鞋子(shoes) 的产品 例如: nike衣服 nike鞋子

请使用抽象工厂写出上述的内容(不需要顾客类),并给每个关键的模块 备注好,具体是什么模块 例如:具体产品是哪个类

package com.java.textfactory;
/**
 * 客户输出类
 * @author Think
 *
 */
public class Client {
	public static void main(String[] args) {
		//买一件Nike的衣服
		Factory factory=new Clothes();//先找到卖衣服的商店
		Nike nike=factory.buyNike();//再找到商店里Nike的品牌
		nike.show();//得到耐克的衣服
		
		//买一件Nike鞋子也是同样的原理
		Factory factory2=new Shoes();//找到到卖鞋子的商店
		Nike nike2=factory2.buyNike();//找到商店里Nike的品牌鞋子
		nike2.show();//输出Nike鞋子
		
		
	}
}

package com.java.textfactory;
/**
 * 阿迪达斯品牌
 * 抽象产品
 * @author Think
 *
 */
public interface Adidas {
	void show();
}

package com.java.textfactory;
/**
 *阿迪达斯的鞋子
 *具体产品类
 * @author Think
 *
 */
public class Adidasshoes implements Adidas  {

	@Override
	public void show() {
		System.out.println("adidas鞋子");
	}

}

package com.java.textfactory;
/**
 * 阿迪达斯的衣服
 * 具体产品类
 * @author Think
 *
 */
public class Adidasclothes implements Adidas{

	@Override
	public void show() {
		System.out.println("Adidas衣服");
	}

}

package com.java.textfactory;
/**
 * 耐克品牌
 * 抽象产品类
 * @author Think
 *
 */
public interface Nike {
	void show();
}

package com.java.textfactory;
/**
 * 耐克的鞋子
 * 具体产品类
 * @author Think
 *
 */
public class Nikeshoes implements Nike{

	@Override
	public void show() {
		System.out.println("耐克鞋子");
	}

}

package com.java.textfactory;
/**
 * 耐克衣服
 * 具体产品类
 * @author Think
 *
 */
public class Nikeclothes implements Nike{

	@Override
	public void show() {
		System.out.println("耐克衣服");
	}

}

package com.java.textfactory;

/**
 * 商店 
 * 抽象工厂类
 * 
 * @author Think
 *
 */
public interface Factory{
	
	Nike buyNike();

	Adidas buyAdidas();
}

package com.java.textfactory;
/**
 * 衣服工厂
 * 具体工厂类
 * @author Think
 *
 */
public class Clothes implements Factory{

	@Override
	public Nike buyNike() {
		return new Nikeclothes();
	}

	@Override
	public Adidas buyAdidas() {
		
		return new Adidasclothes();
	}

}

package com.java.textfactory;
/**
 * 鞋子工厂
 * 具体工厂类
 * @author Think
 *
 */
public class Shoes implements Factory{

	@Override
	public Nike buyNike() {
		return new Nikeshoes();
	}

	@Override
	public Adidas buyAdidas() {
		
		return new Adidasshoes();
	}

}

发布了108 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44739706/article/details/103088477