工厂模式主要是为创建对象提供过度接口,以便将创建对象的具体过程隔离,从而达到提高灵活性的目的
分类一:简单工厂模式,工厂方法模式,抽象工厂模式 逐步抽象
分类二:工厂方法模式(包括简单工厂模式),抽象工厂模式
1.简单工厂模式又称静态工厂方法模式,存在目的:定义一个用于创建对象的接口。
组成:工厂类角色:核心,含有一定商业逻辑和逻辑判断。
抽象产品角色:由产品继承的父类或者实现的接口。
具体产品角色:工厂类所创建的对象是该角色实例。
缺点,不是很好的符合开闭原则,存在“上帝类”
开闭原则:对扩展开放,对修改封闭。
2.工厂方法模式,去掉了简单工厂模式中工厂方法的静态属性,使它可以被子类继承,这样工厂方法上的压力可以由不同的子类来分担。
组成:抽象工厂角色:工厂方法模式核心,与应用程序无关。
具体工厂角色:含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:他是具体的产品继承的父类或者实现的接口。
具体产品角色:具体工厂角色所创建对象就是此角色的实例。
使用继承自抽象工厂的多个子类来替代上帝类。缺点是类会越来越多,因此可以使用和工厂方法相结合:对于产品树上的类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。
使用工厂的情况:
1.当客户程序不需要知道使用对象的创建过程。
2.客户程序使用的对象变动的可能,或者根本就不知道使用哪一个具体的对象。
产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。
3.抽象工厂模式, 抽象工厂模式与和工厂方法模式的区别在于需要创建对象复杂程度上。抽象工厂模式是工厂模式中最为抽象,最具有一般性的。
抽象工厂的用意:给客户端提供一个接口,可以创建多个产品族中的产品对象。
满足条件:
1.系统中有多个产品族,且系统一次只能消费其中一族产品。
2.同属于同一个产品族产品一起使用
组成:抽象工厂角色:同上
具体工厂角色:同上
抽象产品角色:同上
具体产品角色:同上
个人对抽象工厂的理解:将多个产品分成产品族,然后再进行抽象,然后在抽象工厂中进行生产抽象的产品,那么其具体具体工厂可以根据需求实现对应产品族的具体产品了。这样应用更加广泛