设计模式-抽象工厂模式
程序员文章站
2022-05-17 15:12:36
...
很长时间都没看书了,像设计模式这一类的经典书都还没看过,感觉好失败。从今天开始,每天写一篇博客,看我坚持吧。
抽象工厂模式提供一系列相关或相互依赖的对象的生成接口,而无需指定他们具体的类。
抽象工厂模式重点在一系列,这一系列对象是一起使用的,相当于一套,一个应用只能使用同一系列中的对象。抽象工厂模式在创建对象时也可能会用到工厂模式来生产具体的产品对象,也可能使用单例模式是一个产品只有一个实例,也可能使用原型模式(prototype),但还没看,不懂。
抽象工厂有一个抽象工厂接口:
interface AbstractFactory{ AbStractProductA createProductA(); AbstractProductB createProductB(); }
每一个系列 的对象可以实现AbstractFactory接口来创建真正的产品,产品之间是配套的。
A系列接口:
public interface AbstractProductA { public void sayHello(); }
B系列接口
public interface AbstractProductB { public void sayBye(); }
每个产品可以实现对应的接口,工厂方法可以创建对应的产品实例。
为创建不同的产品对象,应该使用不同的具体工厂。
public class MainApp { public void createProduct(AbstractFactory factory) { AbstractProductA a=factory.createProductA(); AbstractProductB b=factory.createProductB(); a.sayHello(); b.sayBye(); } public static void main(String...strings){ AbstractFactory factory1=new Factory1(); AbstractFactory factory2=new Factory2(); new MainApp().createProduct(factory1); new MainApp().createProduct(factory2); } }
抽象工厂方法可以在只改动很少一部分就可以从一个系列的产品切换到另一个系列,但是在添加一个产品的时候,所有的接口要添加额外的方法,每个具体的生成类也要相应的改动生成对应的产品,这种情况下可以传一个参数,指定要生成的对象的类、不过这也是有风险的,书上说可以基于原型和基于类的方式,不知道怎么实现。