java之抽象工厂模式实现

引言

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。

我们这时候要清楚一件事情那就是所有我们得产品多将有着对应的接口以便产出不同的产品
这个模式在Java中非常常见

javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()

案例 控件

需求

我现在需要一些button以及checkbox,但是有着不同的结构,简单就是有windows以及mac

分工

button以及checkbox接口(定义产品) 总抽象工厂(产品接口工厂) Application(创建产品对象)

代码

AbstractFactory:抽象工厂
Applicaiton:应用类
Button:按钮接口
CheckBox:选择框接口
Client:调用者
MacButton:Mac类型的Button接口实现
MacCheckBox:Mac类型的CheckBox接口实现
MacFactory:Mac类型的工厂类
WindowButton:Window类型的Button接口实现
WindowCheckBox:Window类型的CheckBox接口实现
WindowFactory:Window类型的工厂类

									AbstractFactory
public interface AbstractFactory {
    Button createButton();
    CheckBox createCheckBox();
}
										Application
public class Application {
    private Button button;
    private CheckBox checkBox;

    public Application(AbstractFactory factory){
        button = factory.createButton();
        checkBox = factory.createCheckBox();
    }

    public void paint(){
        button.paint();
        checkBox.paint();
    }
}
										Button
public interface Button {
    void paint();
}
										CheckBox
public interface CheckBox {
    void paint();
}
										MacButton
public class MacButton implements Button {

    @Override
    public void paint() {
        System.out.println("这是mac按钮");
    }
}
										MacCheckBox
public class MacCheckBox implements CheckBox {

    @Override
    public void paint() {
        System.out.println("这是mac check box");
    }
}
										MacFactory
public class MacFactory implements AbstractFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }

    @Override
    public CheckBox createCheckBox() {
        return new MacCheckBox();
    }
}
									WindowsButton
public class WindowsButton implements Button {
    @Override
    public void paint() {
        System.out.println("这是windows按钮");
    }
}
									WindowsCheckBox
public class WindowsCheckBox implements CheckBox {
    @Override
    public void paint() {
        System.out.println("这是windows check box");
    }
}
									WindowsFactory
public class WindowsFactory implements AbstractFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public CheckBox createCheckBox() {
        return new WindowsCheckBox();
    }
}
									Client
public class Client {
    public static void main(String[] args) {
        Application application = configureApplication();
        application.paint();
    }

    public static Application configureApplication() {
        Application app;
        AbstractFactory factory;

        String osName = System.getProperty("os.name").toLowerCase();
        System.out.println(osName);
        if ("mac".equals(osName)) {
            factory = new MacFactory();
            app = new Application(factory);
        } else {
            factory = new WindowsFactory();
            app = new Application(factory);
        }
        return app;
    }
}

到这里我们可以得到运行结果
在这里插入图片描述

结束语

抽象工厂模式带给我们的思想就是当我们的产品比较多时候,多意思就是说不仅仅值得类型多而且此类型下还有一起其他分支,这样的话使用抽象工厂模式最合适不过,你不用再去挨个创建对象,并且也可以结果多并且容易扩展的好处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值