设计模式——简单工厂

泥瓦匠攻城狮

共 2139字,需浏览 5分钟

 ·

2022-03-24 15:39

4e0f62fd652fa6034a3d46b1409c73a6.webp





精选推荐:设计模式——观察者模式设计模式——装饰者模式


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


类图


1b9281cfa9a769a3d8470de5682bc1f9.webp


代码实现


我们还是以咖啡店为例。


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


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


下面我们用代码来实现:


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 对象封装的特点。

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报