工厂模式学习笔记

人类工业进化史 与 java设计模式
  1. 石器时代: new Object();
  2. 小作坊模式: 简单工厂模式
  3. 小工厂: 工厂方法模式
  4. 流水线大厂: 抽象工厂模式
简单工厂
  • 注: 下面都会以手机厂商举例来理解各个设计模式, 全部代码会在最后提供下载地址
  • 首先需要一些手机的抽象与实体,以水果X为例
    public interface Phone { String getName(); String getOrigin(); }
    ```
    /**
    • 水果X
      */
      public class IPhoneX implements Phone{

      public IPhoneX(){

      }
      /**
      • 产地
        */
        private String origin;

      public IPhoneX(String origin) {
      this.origin = origin;
      }

      public String getName() {
      return "IPHONEX";
      }

      @Override
      public String getOrigin() {
      return this.origin;
      }

    }
    ```
  • 简单工厂模式的实现
    /** * 小作坊: 简单工厂, 啥也能做, 要啥给啥 * 缺点: 啥也能做,修改动静太大, 不符合开闭原则, 新加一个手机品牌 , 增加对应品牌的实体, 需要修改 * simplefactory中if else的逻辑, 需要测试其整个方法的准确性 * 优点: 从此用户不用再去new对象,用户本身不再关心生产的过程,而只需要关心这个结果 */ public class SimpleFactory{ public Phone getPhone(String name) { if(name.equalsIgnoreCase("iphonex")){ return new IPhoneX(); }else if(name.equalsIgnoreCase("xiaomi")){ return new XiaoMi(); }else if(name.equalsIgnoreCase("huawei")){ return new HuaWei(); }else if(name.equalsIgnoreCase("nokia")){ return new Nokia(); }else { return null; } } }
  • 简单工厂测试
    public class SimpleFactoryTest { @Test public void testGetPhone() { SimpleFactory factory = new SimpleFactory(); assertEquals("iphonex",factory.getPhone("iphonex").getName().toLowerCase()); } }

    工厂方法实现
  • 抽象的工厂接口
    /** * 工厂: * 工厂方法模式: 有了一定的规范, 各个产品都有对应的工厂 * * 工厂必然具有生产产品技能,统一的产品出口 * 适合只做产品, 产品不分族, 如果类似抽象工厂进行分组, 需要创建很多的工厂, DLNOKIAFACTORY、 HKNOKIAFACTORY.... */ public interface Factory { Phone getPhone(); }
  • 工厂实现类
    public class IPhoneXFactory implements Factory{ public Phone getPhone() { return new IPhoneX(); } }
  • 工厂类测试
    public class FactoryTest { @Test public void testGetPhone() { Factory factory = new IPhoneXFactory(); assertEquals("iphonex",factory.getPhone().getName().toLowerCase()); } }

    抽象工厂实现
  • 抽象工厂实现类
    ```
    /**
    • 流水线:
    • 抽象工厂是用户的主入口, 定义了所有实现工厂能做的产品
    • 在Spring中应用得最为广泛的一种设计模式
    • 易于扩展
    • 基本的逻辑都抽象出来, 而且可以进行随意组合, 用户只能用现有的功能,提高健壮性
    • 适合既做产品, 并且产品分流水线, 分为 大陆 港版
    • */
      public abstract class AbstractFactory {

      abstract Phone getXiaoMi();
      abstract Phone getIPhoneX();
      abstract Phone getHuaWei();
      abstract Phone getNokia();

    }
    ```
  • 具体的流水线工厂
    ```
    /**
    • 大陆某具体工厂
      */
      public class DLPhoneFactory extends AbstractFactory{

      private final String ORIGIN = "dalu";
      Phone getXiaoMi() {
      return new XiaoMi(ORIGIN);
      }

      Phone getIPhoneX() {
      return new IPhoneX(ORIGIN);
      }

      Phone getHuaWei() {
      return new HuaWei(ORIGIN);
      }

      @Override
      Phone getNokia() {
      return new Nokia(ORIGIN);
      }
      }
      ```
  • 抽象工厂测试
    ```
    /**
    • 抽象工厂产生俩个实际工厂分别产生自己的产品
      */
      public class AbstractFactoryTest {

      @Test
      public void testGetPhone() {

        AbstractFactory dlPhoneFactory = new DLPhoneFactory();
        assertEquals("iphonex",dlPhoneFactory.getIPhoneX().getName().toLowerCase());

      }
      }
      ```

      最后附上源码下载地址:
  • github地址: git@github.com:offline7LY/designpattern.git

转载于:https://www.cnblogs.com/qq347061329/p/8519451.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值