23种设计模式-抽象工厂模式

简介: 23种设计模式-抽象工厂模式


1写在前面的话


这一章我们来学习一下抽象工厂模式


• 抽象工厂模式


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


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


  总的来说,它是创建一类产品,而不是单个产品。




2抽象工厂模式


用一个代码示例来解释抽象工厂


  1. 首先我们通过模拟造车工厂,把车上的引擎和座椅分为两类,一类是奢华的,一类是很low的



  2.我们来创建Engine.java (引擎接口)和Seat.java( 座椅接口 ),并且分别写出奢华和low两种情况的类。


public interface Engine {
    void run();
}
/***
 * 在引擎里面分为  奢华(Luxury)和 垃圾(low)
 */
class LuxuryEngine implements Engine{
    @Override
    public void run() {
        System.out.println("奢华引擎,跑的超快!");
    }
}
class LowEngine implements Engine{
    @Override
    public void run() {
        System.out.println("很菜的引擎,跑的慢!");
    }
}



public interface Seat {
     void feel();
}
/***
 * 在座椅里面分为  奢华(Luxury)和 垃圾(low)
 */
class LuxurySeat implements Seat{
    @Override
    public void feel() {
        System.out.println("超级舒服!");
    }
}
class LowSeat implements Seat{
    @Override
    public void feel() {
        System.out.println("坐的很不爽");
    }
}



  3.然后我们来开始创建工厂接口 ---CarFactory.java


 public interface CarFactory {

   Engine createEngine();
   Seat createSeat();
 }


在这个接口里,我们提供了创建引擎和创建座椅的方法,并且返回Engine和Seat对象。

 

  4. 因为抽象工厂是创建一个产品族,而不是单个产品,所以我们来创建一个生产low的产品的工厂和一个生产奢华的产品的工厂,这两个工厂都继承于Carfactory接口。


public class LowFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LowEngine();
    }
    @Override
    public Seat createSeat() {
        return new LowSeat();
    }
}



public class LuxuryFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }
    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }
}


 

 5. 最后我们来测试一下我们的代码:


public class Test {
    public static void main(String[] args){
        CarFactory carFactory =new LuxuryFactory();
        Engine engine = carFactory.createEngine();
        engine.run();
        CarFactory carFactory1  = new LowFactory();
        Seat seat = carFactory1.createSeat();
        seat.feel();
    }
}


 

输出结果:


奢华引擎,跑的超快!


坐的很不爽


Process finished with exit code 0


分析:可以看出三个工厂都有自己的利弊之处,但是实际开发中,抽象工厂和方法工厂用的比较少,因为它的结构较简单工厂更加的复杂,一般抽象工厂都用于jdk开发和一些大型开源框架中。


相关文章
|
7月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
37 0
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
33 5
|
7月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
7月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
67 2
|
3月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
7月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
241 4
|
4月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
43 1
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
4月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
4月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式