android中工厂模式应用,抽象工厂模式在android中使用

抽象工厂模式(Abstract Factory)

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

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();

}

}

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

0818b9ca8b590ca3270a3433284dd417.png

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

技术交流群:179914858

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值