一、工厂模式的概念
工厂模式是面向对象设计中最常用的设计模式之一。它是一种创建型模式,其主要思想是定义一个创建对象的接口,将对象的创建和使用分离开。
二、简单工厂模式
简单工厂模式(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(); } }