抽象工厂模式在android中使用

抽象工厂模式(Abstract Factory)

抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步延伸和拓展的结果。抽象工厂模式更加抽象化,更具一般性特点。

我们知道,工厂方法模式是针对单一的产品等级结构而产生的,而这里的抽象工厂模式则是针对多个产品等级结构的。当然,单一的产品等级结构也同样适用于抽象工厂模式的。下面为其具体的等级结构图说明:

技术分享

从上面的结构示意图,可以看到抽象工厂模式中涉及到了多个等级结构的产品角色;同时,针对每一种产品等级结构,都有一种专门的工厂角色负责创建对应的产品,这就是抽象产品角色了。下面为涉及到相关角色说明:

A、抽象产品角色A、B、C...:该角色为产品的多个等级结构,是对应的具体产品角色的父类。

B、具体产品角色A、B、C...:该角色是与上面抽象产品对应的具体产品角色,而且每一个产品结构中的抽象产品角色与具体产品角色的关系是一对多的关系。

C、抽象工厂角色:该角色为抽象工厂角色,是所有创建产品角色的具体工厂角色的父类。该角色是模式中的核心方法类,里面声明了创建不同等级结构产品的方法。

D、具体工厂角色A、B、C...:该角色为具体创建产品等级结构的工厂角色,它与抽象工厂角色是多对一的关系,也是直接与具体产品接触的创建角色。

我们知道了抽象工厂模式的原理,那么接下来就直接通过例子来说明它的使用,毕竟能够正确使用它才说明真正的懂得了它的原理。

例子是这样的,在产品模块中有两个产品的等级结构(当然可以是多个),分别为套餐和娱乐。在每类产品结构中都对应有类目标题,比如:上网套餐和分享娱乐(这个在实际的产品中出现过)。

好了,下面就是我的具体代码:

抽象产品角色(套餐):

public abstract class Meal {

   StringmealName;

   int mealNo;

   float mealPrice;

  

   public String getMealName() {

      return mealName;

   }

 

   public void setMealName(String mealName) {

      this.mealName = mealName;

   }

 

   public int getMealNo() {

      return mealNo;

   }

 

   public void setMealNo(int mealNo) {

      this.mealNo = mealNo;

   }

 

   public float getMealPrice() {

      return mealPrice;

   }

 

   public void setMealPrice(float mealPrice) {

      this.mealPrice = mealPrice;

   }

 

   @Override

   public String toString() {

      return "Meal[mealName=" + mealName + ", mealNo=" + mealNo

            +", mealPrice=" + mealPrice + "]";

   }

}

具体产品角色(普通套餐):

public class CommonMeal extends Meal {

  

   public CommonMeal() {

      setMealName("普通上网套餐");

      setMealNo(1);

      setMealPrice(20.0f);

   }

}

具体产品角色(高速套餐):

public class SpeedMeal extends Meal {

  

   public SpeedMeal() {

      setMealName("高速上网套餐");

      setMealNo(2);

      setMealPrice(30.0f);

   }

}

抽象产品角色(分享娱乐):

public abstract class Entertainment {

   StringetName;

   int etNo;

   StringetType;

 

   public String getEtName() {

      return etName;

   }

 

   public void setEtName(String etName) {

      this.etName = etName;

   }

 

   public int getEtNo() {

      return etNo;

   }

 

   public void setEtNo(int etNo) {

      this.etNo = etNo;

   }

 

   public String getEtType() {

      return etType;

   }

 

   public void setEtType(String etType) {

      this.etType = etType;

   }

 

   @Override

   public String toString() {

      return "Entertainment[etName=" + etName + ", etNo=" + etNo

            +",etType=" + etType + "]";

   }

}

具体产品角色(电影):

public class Movie extends Entertainment {

  

   public Movie() {

      setEtName("电影");

      setEtNo(1);

      setEtType("视频");

   }

}

具体产品角色(小说):

public class Books extends Entertainment {

  

   public Books() {

      setEtName("小说");

      setEtNo(2);

      setEtType("阅读");

   }

}

抽象工厂角色(套餐和娱乐):

public interface ProductFactory {

  

   /* the method of network meal */

   public Meal MealFactory();

  

   /* the method of entertainment */

   public Entertainment EtFactory();

}

具体工厂角色(工厂A):

public class ProductFactoryOne implements ProductFactory {

 

   @Override

   public Meal MealFactory() {

      return new SpeedMeal();

   }

 

   @Override

   public Entertainment EtFactory() {

      return new Books();

   }

}

具体工厂角色(工厂B):

public class ProductFactoryTwo implements ProductFactory {

 

   @Override

   public Meal MealFactory() {

      return new CommonMeal();

   }

 

   @Override

   public Entertainment EtFactory() {

      return new Movie();

   }

}

具体调用代码和工厂方法模式类似,这里不再赘述了,我的代码的运行效果图:

技术分享 

 

到这里,我们已经分析和使用完了抽象工厂模式了。

 

 

 

 

技术交流群:179914858

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。