Java工厂模式

Java工厂模式
一,概述
1.在Java中,万物皆是对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦
2.定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。
二,结构
工厂方法模式的主要角色:
抽象工厂:提供了创建产品的接口,调用者通过访问具体工厂的工厂方法来创建产品.
具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品创建
抽象产品:定义了产品的规范,描述了产品的主要特性和功能
具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间——对应
三,实现
代码如下
抽象工厂:
//咖啡工厂

public interface CoffeeFactory {
//创建咖啡的方法
Coffee createCoffee();
}
具体工厂:
//拿铁咖啡工厂

public class LatteCoffeeFactory implements CoffeeFactory {
public Coffee createCoffee()
return new LatteCoffee();
}

}

//美式咖啡工厂

public class AmericanCoffeeFactory implements CoffeeFactory {
public Coffee createCoffee() {
return new AmericanCoffee();

}

}
咖啡店类
//咖啡店类

public class CoffeeStore {
//通过聚合咖啡工厂
private CoffeeFactory factory;
public CoffeeStore(CoffeeFactory factory) {
this.factory = factory;
}

public Coffee orderCoffee(String type) {

   //创建咖啡类

    Coffee coffee = factory.createCoffee();

    coffee.addMilk();

    coffee.addsugar();

    return coffee;

}

}
以上的编写的代码可以看到,要增加产品类时也要相应地增加工厂类,不需要修改工厂类的代码。
四,优缺点
优点:
1.用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
2.在系统增加新的产品时只需要添加具体产品类和对应的具体类,无须对原工厂进行任何修改,满足开闭原则
缺点:
1.每增加一个产品就要增加一个具体类和一个对应的具体工厂类,这增加了系统的复杂度
五,抽象工厂模式
前面介绍的工厂方法模式考虑的是一类产品的生产,如畜牧只养动物,电视机厂只生产电视机
这些工厂只生产同种类产品,同种类产品成为同级产品,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类)的产品,如电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业。
抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为产品族;
抽象工厂
public interface DessertFactory {
Coffee createCoffee();
Dessert createDessert();

}
具体工厂
//美式甜点工厂

public class AmericanDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new AmericanCoffee();

}
public Dessert createDessert() {
    return new MatchaMousse();

}

}

//意大利风味甜点工厂

public class ItalyDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new LatteCoffee();
}
public Dessert createDessert() {
return new Tiramisu();
}

}
如果要加同一个产品族的话,只需要再加一个对应的工厂类即可,不需要修改其他类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值