工厂方法模式笔记
定义了一个创建对象的接口,让它的子类决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
使用
一个工厂Factory接口,其中包含一个创建特定类的方法createProduce,这个方法由工厂接口的具体类来实现,每个实现类(如ConcreateFactoryA)会创建一个对应的,实现Product接口的具体类(如ProductA)并返回。
代码(Java)
// 产品接口 public interface Product { void method(); } // 产品类A public class ProductA implements Product { @Override public void method() { System.out.println("This is ProductA"); } } // 产品类B public class ProductB implements Product { @Override public void method() { System.out.println("This is ProductB"); } } // 工厂接口 public interface Factory { Product createProduct(); } // 生成产品A的工厂类 public class ConcreteFactoryA implements Factory { @Override public Product createProduct() { return new ProductA(); } } // 生成产品B的工厂类 public class ConcreteFactoryB implements Factory { @Override public Product createProduct() { return new ProductB(); } } // 测试类 public class Client { public static void main(String[] args) { Factory factory = new ConcreteFactoryA(); Product product = factory.createProduct(); product.method(); // 输出:This is ProductA factory = new ConcreteFactoryB(); product = factory.createProduct(); product.method(); // 输出:This is ProductB } }
总结
将创建对象的代码集中在一个对象或方法中,可以避免代码中的重复,并且更方便以后的维护。
当增加产品时,只需要增加对应的产品和工厂类,而不需要修改现有的代码,符合开-闭原则。
同时也实现了针对接口编程,而不针对实现编程。