抽象工厂类的实现

为什么会经常使用工厂模式,因为工厂模式相当于创建实例对象的new ,我们经常要根据类Class生成实例对象,如A a=new A()工厂模式也是用来创建实例对象的,所以以后new时要考虑使用工厂模式。

一、简单工厂模式和抽象工厂模式

(1)简单工厂模式有叫做静态工厂模式,是用来实例化目标类的静态类。简单工厂不满足  开闭原则(一个软件实体应当对扩展开放,对修改关闭)

(2)工厂方法模式,克服了简单工厂模式的 不满足开闭原则,当只有一个产品等级时,运用工厂方法,比如男人,包括黑种人,白种人,黄种人

(3)而当又出现女人的时候,就得用抽象工厂模式了

抽象工厂模式涉及到一下角色;

(1)抽象工厂角色Factory:担任这个角色的是工厂模式的核心,他是与应用系统是商业逻辑无关的,通常使用接口或者抽象类来实现,如下图的Factory 和human.

(2)具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的,通常使用具体类来实现,如下图的 factoryA  FactoryB 以及Femalefatory  malefatory

(3)抽象产品角色:担任这个角色的类是抽象工厂方法模式锁创建的对象的父类,或他们共同拥有的接口,通常使用接口火抽象类实现这一角色,如下面的Plant  fruit 以及 黄种人,白种人 ,黑种人

(4)具体产品角色:抽象工厂模式所创建的任何产品对象都是某一具体产品类的是,这是客户最终需要的东西

如下面的PlantA  PlantB fruitA  fruitB以及   男黑人 男白人  男黄人 女黑人  女白人  女黄人

抽象工厂的优点:产品从客户代码中被分离出来,容易改变产品的系列,将一个系列的产品族统一到一起创建如creatYellow() createBlack()  createWhite()

缺点是在产品族里扩展新的产品很困难,比如又添加一个红色人种,这样就需要对human中添加createRed(),同时还要对具体的工厂方法中添加,如在mailFactory中添加,但是在产品等级中添加新的产品时比较好办,直接添加一个新的具体工厂类就可以了


抽象工厂类的实现