设计模式——简单工厂模式

111 阅读2分钟

WX 搜索:程序员个人修养 查看更多内容

简单工厂

作为工厂模式的入门,简单工厂准确的来说其实不算是一个设计模式,反而比较像是一种编程习惯。其通过将对象的创建细节提取到一个特有的类,这个我们称之为工厂类,来完成对象创建与业务功能的解耦。提取出来的工厂类,也可以被多个模块复用。

类图

简单工厂类图.png

代码实现

我们还是以咖啡店为例。

一个咖啡店可以售卖多种咖啡,比如摩卡、拿铁……,而这每种咖啡可以看作是一个对象实例,都需要咖啡店这个工厂来创建,客户只需要将想喝的咖啡告诉咖啡店,咖啡店就可以提供不同的咖啡,如果以后又增加了新的咖啡品种,比如卡布奇诺,也只需要咖啡店更新产品而已,对于客户并不要任何的改变就可以提供,同一个客户可以享受到更多的咖啡品种。

而这个咖啡店呢,可以线下运营,也可以同时增加线上运营,比如美团团购……这个就类似多个模块对工厂的复用。

下面我们用代码来实现:

 package com.study.design.Factory.abstractfactory;
 ​
 /**
  * 实例对象接口
  * 咖啡
  */
 public interface Coffe {
 ​
     String coffeName();
 ​
 }
 ​
 package com.study.design.Factory.abstractfactory;
 ​
 /**
  * 具体实例类
  * 拿铁咖啡
  */
 public class LatteCoffe implements Coffe{
     @Override
     public String coffeName() {
         return "latte";
     }
 }
 package com.study.design.Factory.abstractfactory;
 ​
 /**
  * 具体实例类
  * 摩卡咖啡
  */
 public class MochaCoffe implements Coffe{
     @Override
     public String coffeName() {
         return "mocha";
     }
 }
 package com.study.design.Factory.abstractfactory;
 ​
 /**
  * 简单工厂类
  */
 public class SimpleFactory {
 ​
     /**
      * 我们这里简单定义
      * 如果传入类型为 1, 则表示获取摩卡咖啡对象,其他都是拿铁
      * @param type 需要的咖啡类型
      * @return
      */
     public Coffe productCoffe(int type){
         if (type == 1){
             return new MochaCoffe();
         }else{
             return new LatteCoffe();
         }
     }
 }
 ​
 package com.study.design.Factory.abstractfactory;
 ​
 /**
  * 消费者
  */
 public class Customer {
 ​
     private SimpleFactory simpleFactory;
     /* 构造方法中绑定工厂实例
      * 也可以通过别的方式,比如 set 方法
      */
     public Customer(SimpleFactory simpleFactory){
         this.simpleFactory = simpleFactory;
     }
     /*客户需求*/
     public void drink(int type){
         Coffe coffe = simpleFactory.productCoffe(type);
         System.out.println("I got a cup of " + coffe.coffeName());
     }
 ​
 }
 package com.study.design.Factory.abstractfactory;
 ​
 public class SimpleFactoryTest {
 ​
     public static void main(String[] args) {
         // 创建工厂对象-咖啡店
         SimpleFactory simpleFactory = new SimpleFactory();
         // 客户-消费者
         Customer customer = new Customer(simpleFactory);
         // 客户不同的对象-不同的咖啡
         customer.drink(1);
         customer.drink(2);
     }
 }

要点

简单工厂,其实就是将创建对象的逻辑提取到另外一个类,称为工厂类,使创建对象的过程与使用者解耦,使用者通过传送不同的参数给工厂类,工厂类负责创建不同的对象并返回。体现了 Java 对象封装的特点,将一块单独的功能逻辑提取封装起来。

WX 搜索:程序员个人修养 查看更多内容