设计模式(四)——抽象工厂模式

一、抽象工厂模式

— 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持增加产品族)

— 抽象工厂模式是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

1、抽象工厂模式

       提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。围绕一个超级工厂创建其他工厂,该超级工厂又称为工厂中的工厂。属于创建型模型!

 

2、实例:汽车产品族为例

引擎:

public interface Engine {
    void run();
    void start();
}
public class LuxuryEngine implements Engine {
    @Override
    public void run() {
        System.out.println("转的快");
    }

    @Override
    public void start() {
        System.out.println("启动快");
    }
}
public class LowEngine implements Engine {
    @Override
    public void run() {
        System.out.println("转的慢");
    }

    @Override
    public void start() {
        System.out.println("启动慢");
    }
}

座位:

 

public interface Seat {
    void message();
}
public class LuxurySeat implements Seat {
    @Override
    public void message() {
        System.out.println("可以自动按摩");
    }
}
public class LowSeat implements Seat {
    @Override
    public void message() {
        System.out.println("不能按摩");
    }
}

轮胎:

public interface Tyre {
    void revolve();
}
public class LuxuryTyre implements Tyre {
    @Override
    public void revolve() {
        System.out.println("磨损慢");
    }
}
public class LowTyre implements Tyre {
    @Override
    public void revolve() {
        System.out.println("磨损快");
    }
}

获取汽车工厂

 

public interface CarFactory {
    Engine createEngine();
    Seat createSeat();
    Tyre createTyre();
}

扩展AbstractFactory的工厂

 

public class LuxuryCarFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }

    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }

    @Override
    public Tyre createTyre() {
        return new LuxuryTyre();
    }
}
public class LowCarFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LowEngine();
    }

    @Override
    public Seat createSeat() {
        return new LowSeat();
    }

    @Override
    public Tyre createTyre() {
        return new LowTyre();
    }
}

使用

public class User {
    public static void main(String[] args) {
        CarFactory factory = new LuxuryCarFactory();
        Engine e = factory.createEngine();
        e.run();
        e.start();
    }
}

3、工厂模式要点

  • 简单工厂模式(静态工厂模式)
    虽然某种程度不符合设计原则,但实际使用最多
  • 工厂方法模式
    不修改已有类的前提下,通过增加新的工厂类实现扩展
  • 抽象工厂模式
    不可增加产品,可以增加产品族。

应用场景

  • JDK中Calendar的getInstance方法
  • JDBC中connection对象的获取
  • Spring中IOC容器创建管理bean的对象
  • 反射中Class对象的newInstance

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值