您的位置:

Android工厂模式详解

一、工厂模式的概念

工厂模式是面向对象设计中最常用的设计模式之一。它是一种创建型模式,其主要思想是定义一个创建对象的接口,将对象的创建和使用分离开。

二、简单工厂模式

简单工厂模式(Simple Factory Pattern)又称静态工厂方法(Static Factory Method)模式,它是工厂模式的一种。简单工厂模式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品对象。简单工厂模式只需要一个工厂类就可以完成所有的产品创建任务,而且这个工厂类可以被外界直接调用,而不需要暴露产品对象创建的逻辑。

以下是一个简单工厂模式的实现示例:

//定义产品接口
public interface Product {
    void show();
}

//定义具体产品类
class ProductA implements Product {
    @Override
    public void show() {
        System.out.println("ProductA");
    }
}

class ProductB implements Product {
    @Override
    public void show() {
        System.out.println("ProductB");
    }
}

//定义工厂类
public class Factory {

    public static Product createProduct(int type) {
        switch (type) {
            case 0:
                return new ProductA();
            case 1:
                return new ProductB();
            default:
                return null;
        }
    }
}

//使用
public class Main {
    public static void main(String[] args) {
        Product product = Factory.createProduct(0);
        if (product != null) {
            product.show();
        }
    }
}

三、工厂方法模式

工厂方法模式(Factory Method Pattern)又称工厂模式,它属于创建型模式。工厂方法模式是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中,这样核心类就变成了抽象类。工厂方法模式可以根据需求定义多个具体的工厂类,具体工厂类负责创建具体的产品对象。

以下是一个工厂方法模式的实现示例:

//定义产品接口
public interface Product {
    void show();
}

//定义具体产品类
class ProductA implements Product {
    @Override
    public void show() {
        System.out.println("ProductA");
    }
}

class ProductB implements Product {
    @Override
    public void show() {
        System.out.println("ProductB");
    }
}

//定义工厂接口
public interface Factory {
    Product createProduct();
}

//定义具体工厂类
class FactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

class FactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

//使用
public class Main {
    public static void main(String[] args) {
        Factory factory = new FactoryA();
        Product product = factory.createProduct();
        product.show();
    }
}

四、抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式通常用于创建一组产品族,而工厂方法模式通常用于创建一个产品。

以下是一个抽象工厂模式的实现示例:

//定义产品A接口
public interface ProductA {
    void show();
}

//定义产品B接口
public interface ProductB {
    void show();
}

//定义具体产品A类
class ConcreteProductA1 implements ProductA {
    @Override
    public void show() {
        System.out.println("ConcreteProductA1");
    }
}

class ConcreteProductA2 implements ProductA {
    @Override
    public void show() {
        System.out.println("ConcreteProductA2");
    }
}

//定义具体产品B类
class ConcreteProductB1 implements ProductB {
    @Override
    public void show() {
        System.out.println("ConcreteProductB1");
    }
}

class ConcreteProductB2 implements ProductB {
    @Override
    public void show() {
        System.out.println("ConcreteProductB2");
    }
}

//定义工厂接口
public interface AbstractFactory {
    ProductA createProductA();

    ProductB createProductB();
}

//定义具体工厂类
class ConcreteFactory1 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB1();
    }
}

class ConcreteFactory2 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB2();
    }
}

//使用
public class Main {
    public static void main(String[] args) {
        AbstractFactory factory = new ConcreteFactory1();
        ProductA productA = factory.createProductA();
        ProductB productB = factory.createProductB();
        productA.show();
        productB.show();
    }
}

五、工厂模式在Android中的应用

在Android中,我们可以使用工厂模式来实现对象的创建和管理,比如在开发中,通过工厂方法来创建不同的Fragment、Adapter等,来动态满足不同需求。

以下是一个Android中使用工厂模式的示例:

//定义产品接口
public interface FragmentProduct {
    Fragment create();
}

//定义具体产品类
class HomeFragmentProduct implements FragmentProduct {
    @Override
    public Fragment create() {
        return new HomeFragment();
    }
}

class MessageFragmentProduct implements FragmentProduct {
    @Override
    public Fragment create() {
        return new MessageFragment();
    }
}

//定义工厂类
public class FragmentFactory {
    public static Fragment createFragment(int type) {
        FragmentProduct product = null;
        switch (type) {
            case 0:
                product = new HomeFragmentProduct();
                break;
            case 1:
                product = new MessageFragmentProduct();
                break;
        }
        if (product != null) {
            return product.create();
        } else {
            return null;
        }
    }
}

//使用
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Fragment fragment = FragmentFactory.createFragment(0);
        getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
    }
}