软件设计 抽象工厂模式

1、创建产品接口

/**
* 手机
*/
public interface Phone {
   /**
    * 打电话
    */
   void call();
}

/**
* 平板
*/
public interface Pad {
   /**
    * 看视频
    */
   void video();
}


2、定义具体产品

/**
* 小米手机
*/
public class XiaoMiPhone implements Phone {
   @Override
   public void call() {
       System.out.println("小米手机打电话");
  }
}
/**
* 小米平板
*/
public class XiaoMiPad implements Pad {
   @Override
   public void video() {
       System.out.println("小米平板看视频");
  }
}
/**
* 华为手机
*/
public class HuaWeiPhone implements Phone {
   @Override
   public void call() {
       System.out.println("华为手机打电话");
  }
}
/**
* 华为平板
*/
public class HuaWeiPad implements Pad {
   @Override
   public void video() {
       System.out.println("华为平板看视频");
  }
}


3、创建抽象工厂

/**
* 抽象工厂
*/
public abstract class AbstractFactory {
   /**
    * 获取手机
    * @return 手机对象
    */
   public abstract Phone getPhone();
   /**
    * 获取平板
    * @return 平板对象
    */
   public abstract Pad getPad();
}


4、创建品牌工厂

/**
* 小米工厂
*/
public class XiaoMiFactory extends AbstractFactory{
   @Override
   public Phone getPhone() {
       return new XiaoMiPhone();
  }
   @Override
   public Pad getPad() {
       return new XiaoMiPad();
  }
}
/**
* 华为工厂
*/
public class HuaWeiFactory extends AbstractFactory {
   @Override
   public Phone getPhone() {
       return new HuaWeiPhone();
  }
   @Override
   public Pad getPad() {
       return new HuaWeiPad();
  }
}

5、生产使用

// 小米手机
Phone xiaomiPhone = new XiaoMiFactory().getPhone();
// 华为手机
Phone huaweiPhone = new HuaWeiFactory().getPhone();
// 小米平板
Pad xiaoMiPad = new XiaoMiFactory().getPad();
// 华为平板
Pad huaweiPad = new HuaWeiFactory().getPad();
// 输出测试
xiaomiPhone.call();
huaweiPhone.call();
xiaoMiPad.video();
huaweiPad.video();

输出结果为:

小米手机打电话
华为手机打电话
小米平板看视频
华为平板看视频

 

优缺点:

优点

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

 

使用场景:

1、QQ 换皮肤,一整套一起换。

2、生成不同操作系统的程序。

 

注意:

产品族难扩展,产品等级易扩展。

posted @ 2022-12-15 00:12  kuaiquxie  阅读(4)  评论(0编辑  收藏  举报