设计模式(二)工厂模式

工厂模式

黑马程序员:https://www.bilibili.com/video/BV1Np4y1z7BU?p=34

简介

在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new对象,就会对该对象耦合严重。

如果我们使用工厂来创建对象,我们就只有和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说工厂模式的最大特点是解耦

概述

需求:设计一个咖啡店点餐系统

设计一个咖啡类,并且有两个子类,(美式咖啡和拿铁咖啡);再设计一个咖啡店,咖啡店具有点餐功能。

UML图

在这里插入图片描述

代码实现

咖啡类

public abstract class Coffee {
   
    //获取咖啡的名字
    public abstract String getName();
    //向咖啡中加奶
    public void addMilk(){
   
        System.out.println("加奶");
    }
    //向咖啡中加糖
    public void addSugar(){
   
        System.out.println("加糖");
    }
}

美式咖啡类

public class AmericanCoffee extends Coffee{
   
    @Override
    public String getName() {
   
        return "美式咖啡";
    }

}

拿铁咖啡类

public class LatteCoffee extends Coffee{
   
    @Override
    public String getName() {
   
        return "拿铁咖啡";
    }
}

咖啡店类

public class CoffeeStore {
   
    //点咖啡
    public Coffee orderCoffee(String type){
   
        Coffee coffee=null;
        if ("american".equals(type)){
   
            coffee=new AmericanCoffee();
        }else if ("latte".equals(type)){
   
            coffee=new LatteCoffee();
        }else {
   
            throw new RuntimeException("对不起,没有此类咖啡");
        }
        //给咖啡加配料
        coffee.addMilk();
        coffee.addSugar();
        return coffee;
    }
}

测试类

public class Client {
   
    public static void main(String[] args) {
   
        //创建咖啡店对象
        CoffeeStore coffeeStore = new CoffeeStore();
        //点咖啡
        Coffee coffee = coffeeStore.orderCoffee("latte");
        //获取咖啡的名字
        System.out.println(coffee.getName());

    }
}

总结

该案例中,如果我们多了一种咖啡,就会去修改代码,违背了开闭原则。

分类

  • 简单工厂模式(不属于GOF的23种经典设计模式)
  • 工厂方法模式
  • 抽象工厂模式

简单工厂模式

简单工厂模式不是一种设计模式,更像是一种编程习惯。

结构

简单工厂的角色:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值