工厂模式概述
需求:設(shè)計一個咖啡店點餐系統(tǒng)。
設(shè)計一個咖啡類(Coffee),并定義其兩個子類(美式咖啡【AmericanCoffee】和拿鐵咖啡【LatteCoffee】);再設(shè)計一個咖啡店類(CoffeeStore),咖啡店具有點咖啡的功能。
具體類的設(shè)計如下:
?
在java中,萬物皆對象,這些對象都需要創(chuàng)建,如果創(chuàng)建的時候直接new該對象,就會對該對象耦合嚴重,假如我們要更換對象,所有new對象的地方都需要修改一遍,這顯然違背了軟件設(shè)計的開閉原則。
如果我們使用工廠來生產(chǎn)對象,我們就只和工廠打交道就可以了,徹底和對象解耦,如果要更換對象,直接在工廠里更換該對象即可,達到了與對象解耦的目的;
所以說,工廠模式最大的優(yōu)點就是:解耦。
Coffee.java
package com.itheima.pattern.factory.before;/*** @version v1.0* @ClassName: Coffee* @Description: 咖啡類* @Author: dym*/ public abstract class Coffee {public abstract String getName();//加糖public void addsugar() {System.out.println("加糖");}//加奶public void addMilk() {System.out.println("加奶");} }?AmericanCoffee.java
package com.itheima.pattern.factory.before;/*** @version v1.0* @ClassName: AmericanCoffee* @Description: 美式咖啡* @Author: dym*/ public class AmericanCoffee extends Coffee {public String getName() {return "美式咖啡";} }LatteCoffee.java
package com.itheima.pattern.factory.before;/*** @version v1.0* @ClassName: LatteCoffee* @Description: 拿鐵咖啡* @Author: dym*/ public class LatteCoffee extends Coffee {public String getName() {return "拿鐵咖啡";} }?CoffeeStore.java
package com.itheima.pattern.factory.before;/*** @version v1.0* @ClassName: CoffeeStore* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class CoffeeStore {public Coffee orderCoffee(String type) {//聲明Coffee類型的變量,根據(jù)不同類型創(chuàng)建不同的coffee子類對象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;} }Client.java
package com.itheima.pattern.factory.before;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class Client {public static void main(String[] args) {//1,創(chuàng)建咖啡店類CoffeeStore store = new CoffeeStore();//2,點咖啡Coffee coffee = store.orderCoffee("latte");System.out.println(coffee.getName());} }介紹三種工廠
- 簡單工廠模式(不屬于GOF的23種經(jīng)典設(shè)計模式)
- 工廠方法模式
- 抽象工廠模式
總結(jié)
- 上一篇: JDK源码解析-Runtime类
- 下一篇: 静态工厂模式