抽象工厂模式
个人理解:抽象工厂是工厂模式的加强版,把工厂模式看做一个单元的话 抽象工厂模式就是把多个单元用一个抽象类装起来
再使用一个抽象工厂类 来实现一个方法 这个方法里面写上判断条件 根据需求来返回所需要的工厂 然后让这个工厂生产
比如:A工厂是生产水果 B工厂是生产衣服 在用户需要吃的时候就 new 一个抽象工厂类 然后告诉抽象工厂类需要水果工厂,抽象工厂就会返回水果工厂来供系统使用
了解抽象工厂模式
什么是抽象工厂模式?
工厂模式的加强版。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
抽象工厂模式是做什么的?
主要解决接口选择的问题。
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的适用情景
1、QQ 换皮肤,一整套一起换。
2、生成不同操作系统的程序。
…
使用抽象工厂模式的好处?
当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
代码:
水果工厂
水果接口
//水果
public interface Fruit {
//初始化
void getInstance();
}
水果对象
public class Apple implements Fruit{
public void getInstance() {
System.out.println("获得苹果");
}
}
public class Banana implements Fruit{
public void getInstance() {
System.out.println("获得香蕉");
}
}
抽象工厂实现类(水果工厂)
//水果工厂
public class FruitFactory extends AbstractFactory<Fruit> {
public Fruit getProduct(String name) {
if(name==null)return null;
if(name.equals("Apple")){
return new Apple();
}else if(name.equals("Banana")){
return new Banana();
}else {
return null;
}
}
}
家具工厂
家具接口
//家具接口
public interface Furniture {
//初始化
void getInstance();
}
家具对象
//茶几
public class TeaTable implements Furniture{
public void getInstance() {
System.out.println("生产一个茶几");
}
}
//衣柜
public class Wardrobe implements Furniture{
public void getInstance() {
System.out.println("生产一个衣柜");
}
}
抽象工厂实现类(家具工厂)
//家具工厂
public class FurnitureFactory extends AbstractFactory<Furniture> {
public Furniture getProduct(String name) {
if(name==null)return null;
if(name.equals("TeaTable")){
return new TeaTable();
}else if(name.equals("Wardrobe")){
return new Wardrobe();
}else {
return null;
}
}
}
抽象工厂
抽象工厂类
public abstract class AbstractFactory<T> {
public abstract T getProduct(String name);
}
测试
public class Demo {
public static void main(String[] args) {
//获取水果工厂
AbstractFactory fruit = FactoryProducer.getFactory("fruit");
//获取苹果对象
Apple apple = (Apple) fruit.getProduct("Apple");
apple.getInstance();
//获取家具工厂
AbstractFactory furniture = FactoryProducer.getFactory("furniture");
//获取茶几对象
TeaTable teaTable = (TeaTable) furniture.getProduct("TeaTable");
teaTable.getInstance();
}
//测试结果
获得苹果
生产一个茶几