设计模式_抽象工厂模式


铺垫

    要知道抽象模式最大的优点必须先了解什么是产品等级和产品族 


在上面的类图中,两厢车和三厢车称为两个不同的等级结构;而2.0排量车和2.4排量车则称为两个不同的产品族。再具体一点,2.0排量两厢车和2.4排量两厢车属于同一个等级结构,2.0排量三厢车和2.4排量三厢车属于另一个等级结构;而2.0排量两厢车和2.0排量三厢车属于同一个产品族,2.4排量两厢车和2.4排量三厢车属于另一个产品族。

例子
    接着上篇写的女娲造人
public interface Human {
 public void getColor();
 public void talk();
 public void getSex();
}
public abstract class AbstractYellowHuman implements  Human{

 public void getColor() {
  System.out.println("黄种人"); 
 }

 public void talk() {
  System.out.println("汉语");
 }
}
public class MaleYellow extends AbstractYellowHuman {

 public void getSex() {
  System.out.println("黄种人男性");
 }
}

public class FemaleYellow extends AbstractYellowHuman {

 public void getSex() {
  System.out.println("黄种人女性");
 }
}

白种人和黑种人都一样。。。这里就不贴代码了
public interface HumanFactory {
 public Human createWhiteHuman();
 public Human createBlackHuman();
 public Human createYellowHuman();
}
public class FemaleFactory implements HumanFactory {

 public Human createBlackHuman() {
  return null;
 }
 public Human createWhiteHuman() {
  return null;
 }
 public Human createYellowHuman() {
  return new FemaleYellow();
 }
}
public class MaleFactory implements HumanFactory {

 public Human createBlackHuman() {
  return null;
 }
 public Human createWhiteHuman() {
  return null;
 }
 public Human createYellowHuman() {
  return new MaleYellow();
 }
}
public class Client {

 public static void main(String[] args) {
  HumanFactory factory=new MaleFactory();
  MaleYellow maleYellow=(MaleYellow) factory.createYellowHuman();
  maleYellow.talk();
 }
}
/* Human接口   
 * 抽象类白种人AbstractWhiteHuman实现Human接口中俩个方法talk()和getColor(),这样就有了三种人
 * 白种男人 MaleWhiteHuman 继承AbstractWhiteHuman 得到白种男人
 * 白种女人 FemaleWhiteHuman 继承AbstractWhiteHuman得到白种女人
 * 至于工厂就可以自己DIY了
 * */


优点 
    但是可以满足多个等级结构,例如买牛奶和咖啡,再加上一个条件大杯还是小杯。

缺点
    非常难以扩展

适用场景

       当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。

我是菜鸟,我在路上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值