设计模式:抽象工厂模式

设计模式:抽象工厂模式

  • 抽象工厂模式简介:
    • 简介:抽象工厂模式是一种创建型模式,围绕一个超级工厂创建其他工厂。
    • 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体类
    • 主要解决: 解决接口选择问题
    • 使用场景: 系统的产品有多余一个的产品族,而系统只消灭其中某一族的产品。
  • 抽象工厂模式成分
    • 产品族A,B接口
    • 产品族A,B的实现
    • 工厂抽象方法:包含获取两个产品族的方法
    • 获取不同产品族的工厂实现
    • 工厂生成器
  • 抽象工厂优缺点
    • 优点:
      1. 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象
    • 缺点:
      1. 产品族扩展非常困难,要增加一个系列的某个产品,既要在抽象的creator里加代码,又要在具体的里面加代码
  • 抽象工厂模式实现
    • 产品族的抽象
      package com.fg.java.factory;
      
      public interface Person {
          public void sayName();
      }
      package com.fg.java.factory;
      
      /**
       * 枪的抽象类
       */
      public interface Gun {
          public void SayName();
      }
      

       

    • 产品族的实现
      Person:
      package com.fg.java.factory;
      
      public class HaoTianPerson implements Person {
          public void sayName() {
              System.out.println("my name is HaoTian");
          }
      }
      
      package com.fg.java.factory;
      
      public class WangMuPerson implements Person {
          public void sayName() {
              System.out.println("My name is WangMu");
          }
      }
      

      Gun:
       

      package com.fg.java.factory;
      
      public class M416 implements Gun {
          public void SayName() {
              System.out.println("I`m M416");
          }
      }
      
      package com.fg.java.factory;
      
      public class UZI implements Gun {
          public void SayName() {
              System.out.println("I`m UZI");
          }
      }
      

       

    • 产品工厂抽象
      package com.fg.java.factory;
      
      public abstract class AbstractFactory {
          public abstract Gun getGun(String gun);
          public abstract Person getPerson(String peson);
      }
      

       

    • 产品工厂实现
      PersonFactory:
      package com.fg.java.factory;
      
      public class PersonFactory  extends AbstractFactory{
          @Override
          public Person getPerson(String peson) {
              if(peson == null){
                 return null;
              }
              if("HaoTian".equalsIgnoreCase(peson)){
                  return new HaoTianPerson();
              } else if("WangMu".equalsIgnoreCase(peson)){
                  return new WangMuPerson();
              }
              return null;
          }
      
          @Override
          public Gun getGun(String gun) {
              return null;
          }
      }
      

      GunFacotory:
       

      package com.fg.java.factory;
      
      public class GunFactory  extends AbstractFactory{
          @Override
          public Gun getGun(String gun) {
              if(gun == null){
                  return null;
              }
              if("M416".equalsIgnoreCase(gun)){
                  return new M416();
              }else if("UZI".equalsIgnoreCase(gun)){
                  return new UZI();
              }
              return null;
          }
      
          @Override
          public Person getPerson(String peson) {
              return null;
          }
      }
      

       

    • 生产者
      工厂实现:
      package com.fg.java.factory;
      
      public class FactoryProducer {
          public static AbstractFactory getFactory(String choice){
              if("GUN".equalsIgnoreCase(choice)){
                  return new GunFactory();
              }else if("Person".equalsIgnoreCase(choice)){
                  return new PersonFactory();
              }
              return null;
          }
      }
      

       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值