意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
结构
其中:文章来源:https://www.toymoban.com/news/detail-847384.html
- AbstractFactory声明一个创建抽象产品对象的操作接口。
- ConcreteFactory实现创建具体产品对象的操作。
- AbstractProduct为一类产品对象声明一个接口。
- ConcreteProduct定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
- Client仅使用由AbstractFactory和AbstractProduct类声明的接口。
适用性
Abstract Factory模式使用于:文章来源地址https://www.toymoban.com/news/detail-847384.html
- 一个系统要独立于他的产品的创建、组合和表达时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当要强调一个产品类库,只想显示他们的接口而不是实现时。
代码示例
//产品抽象类
abstract class Product {
public abstract void doSomething();
}
//具体产品A
class ConcreteProductA extends Product {
@Override
public void doSomething() {
System.out.println("Doing something with ConcreteProductA...");
}
}
//具体产品B
class ConcreteProductB extends Product {
@Override
public void doSomething() {
System.out.println("Doing something with ConcreteProductB...");
}
}
//工厂抽象类
abstract class AbstractFactory {
public abstract Product newProductA();
public abstract Product newProductB();
}
//具体工厂A
class ConcreteFactoryA extends AbstractFactory {
@Override
public Product newProductA() {
return new ConcreteProductA();
}
@Override
public Product newProductB() {
return new ConcreteProductB();
}
}
//具体工厂B
class ConcreteFactoryB extends AbstractFactory {
@Override
public Product newProductA() {
return new ConcreteProductA(); //返回不同的具体产品
}
@Override
public Product newProductB() {
return new ConcreteProductB(); //返回不同的具体产品
}
}
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new ConcreteFactoryA();
Product p1 = factory.newProductA();
Product p2 = factory.newProductB();
p1.doSomething();
p2.doSomething();
}
}
到了这里,关于Abstract Factory 抽象工厂的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!