前言
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。
工厂方法模式
每一种实现类都是一个工厂,专注于某一件产品(类)的实现
1. 基本接口和不同实现类
public interface INoodles {
/**
* 描述每种面条啥样的
*/
public abstract void desc();
}
public class LzNoodles implements INoodles {
@Override
public void desc() {
System.out.println("兰州拉面,兰州特色小吃");
}
}
public class PaoNoodles implements INoodles {
@Override
public void desc() {
System.out.println("泡面,程序员必备");
}
}
public class ReganNoodles implements INoodles {
@Override
public void desc() {
System.out.println("红油热干面,武汉特色小吃");
}
}
2. 基本工厂接口和不同实现类工厂
/**
* 工厂方法模式
*/
public interface INoodlesFactory {
INoodles createNoodles();
}
public class LzINoodlesFactory implements INoodlesFactory {
@Override
public INoodles createNoodles() {
return new LzNoodles();
}
}
public class PaoINoodlesFactory implements INoodlesFactory {
@Override
public INoodles createNoodles() {
return new PaoNoodles();
}
}
public class ReganINoodlesFactory implements INoodlesFactory {
@Override
public INoodles createNoodles() {
return new ReganNoodles();
}
}
3. 具体实现和测试
public class Test {
public static void main(String[] args) {
INoodlesFactory noodlesFactory = new LzINoodlesFactory();
INoodles noodles = noodlesFactory.createNoodles();
noodles.desc();
//打印结果为: 兰州拉面,兰州特色小吃
}
}