工厂模式
实现了创建者和调用者的分离
详细分类
简单工厂模式
工厂方法模式
抽象工厂模式
核心本质:
实例化对象 用工厂方法代替new操作
将选择实现类。创建对象统一管理和控制。从而将调用者跟我们的实现类接耦
简单工厂模式:
1.简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法。通过接收参数的不同
来返回不同的对象实例
2.对于增加新产品无能为力,不修改代码的话,是无法扩展的。
代码如下
public interface Car {
void run();
}
public class Audi implements Car{
@Override
public void run() {
System.out.println("奥迪在跑");
}
public class Byd implements Car{
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
}
public class CarFactory {
public static Car creatCar(String type)
{
if("奥迪".equals(type))
{
return new Audi();
}
else if("比亚迪".equals(type)){
return new Byd();
}
else{
return null;
}
}
}/*
简单工厂情况下
*/
public class Client2 { //调用者
public static void main(String[] args) {
Car c1=CarFactory.creatCar("奥迪");
Car c2=CarFactory.creatCar("比亚迪");
c1.run();
c2.run();
}
}
工厂方法模式
为了避免简单工厂模式的缺点,不完全满足 OCP(一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。)
工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个
项目或者说一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
工厂方法设计模式如下
public class Audi implements Car{
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
public class AudiFactory implements CarFactory{
@Override
public Car creatcar() {
return new Audi();
}
}
public class Benz implements Car{
@Override
public void run() {
System.out.println("奔驰在跑");
}
}
public class BenzFactory implements CarFactory{
@Override
public Car creatcar() {
return new Benz();
}
}
public class Byd implements Car{
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
public interface Car {
void run();
}
public class BydFactory implements CarFactory{
@Override
public Car creatcar() {
return new Byd();
}
}
public interface CarFactory {
Car creatcar();
}
public class Client {
public static void main(String[] args) {
Car c1=new AudiFactory().creatcar();
Car c2=new BydFactory().creatcar();
Car c3=new BenzFactory().creatcar();
c1.run();
c2.run();
c3.run();
}
}
我们根据设计理论建议:工厂方法模式,但实际上,我们一般都用简单工厂模式。
抽象工厂模式
用来生产不同产品族的全部产品(对于新的产品无能为力,支持增加产品族)
抽象工厂模式是工厂模式的升级版本,在有多个业务品种,业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
工厂模式要点
简单工厂模式(静态工厂模式)
虽然某种程度不符合设计原则,但是实际使用最多。
工厂方法模式
不修改已有类的前提下 ,通过增加新的工厂类实现扩展
抽象工厂模式
不可以增加产品,可以增加产品族。
(若某个类以Factory结尾,它就是采用工厂模式实现的)