抽象工厂模式的Android实例

介绍

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Android开发中,抽象工厂模式可以用于创建一系列相关的视图组件或数据处理对象。

步骤

下面是实现抽象工厂模式的步骤:

步骤 描述
定义抽象工厂 创建一个抽象工厂接口,声明创建一系列相关对象的方法。
实现具体工厂 创建具体工厂类,实现抽象工厂接口。
定义抽象产品 创建一组抽象产品接口,声明具体产品类的公共方法。
实现具体产品 创建具体产品类,实现抽象产品接口。
使用抽象工厂 在应用中使用抽象工厂创建一系列相关对象,而不直接使用具体工厂和产品。

代码实现

1. 定义抽象工厂

public interface WidgetFactory {
    Button createButton();
    TextView createTextView();
}

2. 实现具体工厂

public class MaterialWidgetFactory implements WidgetFactory {
    @Override
    public Button createButton() {
        return new MaterialButton();
    }

    @Override
    public TextView createTextView() {
        return new MaterialTextView();
    }
}

public class ClassicWidgetFactory implements WidgetFactory {
    @Override
    public Button createButton() {
        return new ClassicButton();
    }

    @Override
    public TextView createTextView() {
        return new ClassicTextView();
    }
}

3. 定义抽象产品

public interface Button {
    void render();
}

public interface TextView {
    void render();
}

4. 实现具体产品

public class MaterialButton implements Button {
    @Override
    public void render() {
        // 渲染Material风格的按钮
    }
}

public class ClassicButton implements Button {
    @Override
    public void render() {
        // 渲染Classic风格的按钮
    }
}

public class MaterialTextView implements TextView {
    @Override
    public void render() {
        // 渲染Material风格的文本视图
    }
}

public class ClassicTextView implements TextView {
    @Override
    public void render() {
        // 渲染Classic风格的文本视图
    }
}

5. 使用抽象工厂

public class MainActivity extends AppCompatActivity {

    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 使用Material风格的工厂创建按钮和文本视图
        WidgetFactory materialFactory = new MaterialWidgetFactory();
        button = materialFactory.createButton();
        textView = materialFactory.createTextView();

        // 使用Classic风格的工厂创建按钮和文本视图
        WidgetFactory classicFactory = new ClassicWidgetFactory();
        button = classicFactory.createButton();
        textView = classicFactory.createTextView();
    }
}

甘特图

gantt
    dateFormat  YYYY-MM-DD
    title       抽象工厂模式实现流程
    section 定义
    定义抽象工厂  : 2021-01-01, 1d
    定义抽象产品  : 2021-01-01, 1d
    section 实现
    实现具体工厂  : 2021-01-02, 2d
    实现具体产品  : 2021-01-03, 2d
    section 使用
    使用抽象工厂  : 2021-01-05, 2d

类图

classDiagram
    class WidgetFactory{
        +createButton()
        +createTextView()
    }
    class MaterialWidgetFactory{
        +createButton()
        +createTextView()
    }
    class ClassicWidgetFactory{
        +createButton()
        +createTextView()
    }
    interface Button{
        +render()
    }
    interface TextView{
        +render()
    }
    class MaterialButton{
        +render()
    }
    class ClassicButton{
        +render()
    }
    class MaterialTextView{
        +render()
    }
    class ClassicTextView{
        +render()
    }
    WidgetFactory <|-- MaterialWidgetFactory
    Widget