设计模式--------工厂模式(一)

工厂模式

解释

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

作用

  1. 解耦;例如我们去买电脑,不用工厂模式,自己需要new一个电脑,相当于自己造了台电脑,有了工厂模式我们只需要给工厂说要什么牌子电脑,不用管电脑怎样创造的;没有什么是加一层解决不了的;
  2. 扩展性高;如果想增加一个产品,只要扩展一个工厂类就可以。
  3. 易维护,减少代码量; 屏蔽产品的具体实现,调用者只关心产品的接口。

分类

1、简单工厂模式(不属于23种设计模式,实际用的最多)

在这里插入图片描述

  1. 创建一个接口
public interface Computer {
     void produce();
}
  1. 接口实现类
    DellComputer类
public class DellComputer implements Computer {
    public void produce() {
        System.out.println("买戴尔电脑");

    }
}

LenovoComputer类

public class LenovoComputer implements Computer {
   public void produce() {
       System.out.println("买联想电脑");
   }
}

  1. 创建一个工厂,按传的参数创建对象
 public class ComputerFactory {
    public Computer buyComputer(String name){
       if(name.equals("dell")){
           return new DellComputer();
       }else if(name.equals("lenovo")){
           return  new LenovoComputer();

       }else{
           return null;
       }


    }
}
  1. 使用工厂,获取相应的对象
import org.junit.Test;

public class TestComputer {


    @Test
    public  void getComputer(){
        ComputerFactory computerFactory=new ComputerFactory();
        Computer computer=computerFactory.buyComputer("dell");
        computer.produce();

    }
}
  1. 执行结果
    在这里插入图片描述

缺点

若是现在想买华硕电脑,就需要改工厂类中的逻辑,这就不符合oop七大原则中的开闭原则(对扩展开放,对修改关闭)故引出工厂模式;

2、工厂模式

在这里插入图片描述
2. 新增产品acer

AcerComputer类

public class AcerComputer implements Computer {
   @Override
   public void produce() {
       System.out.println("买宏碁电脑");
   }
}
  1. 声明工厂接口
public interface Factory {
  public Computer createComputer();
}

  1. 生产acer的工厂类
public class AcerComputerFactor implements  Factory {
   @Override
   public Computer createComputer() {

       return new AcerComputer();
   }
}

  1. 生产lenovo的工厂类
public class LenovoComputerFactor implements  Factory {
  @Override
  public Computer createComputer() {

      return new LenovoComputer();
  }
}


  1. 生产dell的工厂类
public class DellComputerFactor implements  Factory {
  @Override
  public Computer createComputer() {
      return new DellComputer();
  }
}


  1. 使用工厂,获取相应的对象
import org.junit.Test;

public class TestComputer {


    @Test
    public  void getComputer(){
       Factory factory;
       factory=new DellComputerFactor();
        factory.createComputer().produce();
    }
}
  1. 运行结果

在这里插入图片描述

缺点

无论加多少类,我们都不用修改原来类中的代码,而是通过增加工厂类来实现,但是如果类过多的话,就要创建多个工厂,麻烦;

总结

简单工厂:一个工厂类,一个产品抽象类。
工厂方法:多个工厂类,一个产品抽象类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值