抽象工厂模式(AbstractFactoryPattern)

定义

提供一个创建一系列相关或者相互依赖的类的工厂接口,他包含多个产品类的工厂方法,及一个工厂类能够创建多个产品。

结构图

image

 

角色与理解

  • 抽象工厂模式总共包含如下四种角色:
    • AbstractFactory(抽象工厂):包含多个创建同一产品族中产品的抽象工厂方法的抽象类,一个抽象工厂定义了一个输出的产品族
    • ConcreteFactory(具体工厂):抽象工厂的实现
    • AbstractProduct(抽象产品):所有具体产品的父类,这里指单一产品的父类而不是一个产品族的共同父类
    • ConcreteProduct(具体产品):具体的产品
  • 实际上抽象工厂模式与工厂方法模式抽象产品与具体产品的角色是一致的,不同的只是工厂定义的不同,工厂方法中的工厂只生产单一产品,而抽象工厂的工厂生产的是一个产品族的产品

核心代码

抽象产品

public interface Button {
    void display();
}
public interface ComboBox {
    void display();
}
public interface TextField {
    void display();
}

具体产品

public class SpringButton implements Button {
    @Override
    public void display() {
        System.out.println("按钮显示绿色");
    }
}
public class SpringComboBox implements ComboBox {
    @Override
    public void display() {
        System.out.println("勾选框显示绿色");
    }
}
public class SpringTextField implements TextField {
    @Override
    public void display() {
        System.out.println("文本域显示绿色");
    }
}

抽象工厂

public interface SkinFactory {
   
 Button createButton();
    ComboBox createComboBox();
    TextField createTextField();
}
public abstract class AbstractSkinFactory implements SkinFactory{
}

具体工厂

public class SpringSkinFactory extends AbstractSkinFactory {
    @Override
    public Button createButton() {
        System.out.println("创建绿色按钮");
        return new SpringButton();
    }
    @Override
    public ComboBox createComboBox() {
        System.out.println("创建绿色勾选框");
        return new SpringComboBox();
    }
    @Override
    public TextField createTextField() {
        System.out.println("创建绿色文本域");
        return new SpringTextField();
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        AbstractSkinFactory abstractSkinFactory = new SpringSkinFactory();
        Button button = abstractSkinFactory.createButton();
        ComboBox comboBox = abstractSkinFactory.createComboBox();
        TextField textField = abstractSkinFactory.createTextField();
        button.display();
        comboBox.display();
        textField.display();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值