Java设计模式——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是属于创建型的设计模式,意在创造一个抽象的工厂,而后再由实例化出的具体的工厂来进行生产。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

应用实例:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用 OO 的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。

优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

使用场景: 1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

注意事项:产品族难扩展,产品等级易扩展。

代码举例:

一、类图:

二、代码:

1.创建颜色系产品接口

public interface color {
  public void draw();
}

2.创建颜色系具体产品

public class Red implements color {

    @Override
    public void draw() {

        System.out.println("是红色的");

    }

}
public class Blue implements color {

    @Override
    public void draw() {

        System.out.println("是蓝色的");
    }

}

3.创建形状系产品接口

public interface Shape {
  public void draw();
}

4.创建形状系具体产品

public class Rantage implements Shape {

    @Override
    public void draw() {

        System.out.println("图案是矩形");
    }

}
public class Circle implements Shape {

    @Override
    public void draw() {

        System.out.println("图案是圆形");
    }

}

5.创建抽象工厂,用以为具体工厂向上转型

public abstract class AbstractFactory {
   public abstract Shape getShape(String shaptype);

   public abstract color getColor(String colortype);
}

6.创建具体的颜色工厂和形状工厂,都继承自抽象工厂

public class Color_Factory extends AbstractFactory {

    @Override
    public Shape getShape(String shaptype) {

        return null;
    }

    @Override
    public color getColor(String colortype) {
        if (colortype == null) {
            return null;
        }
        if(colortype.equalsIgnoreCase("Red")){
            return new Red();
        }
        if(colortype.equalsIgnoreCase("Blue")){
            return new Blue();
        }
        return null;
    }

}
public class Shape_Factory extends AbstractFactory {

    @Override
    public Shape getShape(String shaptype) {
        if(shaptype == null){
            return null;
        }
        if(shaptype.equalsIgnoreCase("Circle")){
            return new Circle();
        }
        if(shaptype.equalsIgnoreCase("Rantage")){
            return new Rantage();
        }
        return null;
    }

    @Override
    public color getColor(String colortype) {

        return null;
    }

}

7.创建工厂制造者,用以生成具体的工厂

public class FactoryProducer {
  public AbstractFactory getFactory(String factoryType){
      if(factoryType == null){
          return null;
      }
      if (factoryType.equalsIgnoreCase("color_factory")) {
        return new Color_Factory();
    }
      if (factoryType.equalsIgnoreCase("shape_factory")) {
            return new Shape_Factory();
    }
      return null;
  }
}

8.用户

public class User {

    public static void main(String[] args) {

        FactoryProducer factoryProducer = new FactoryProducer();

        factoryProducer.getFactory("color_factory").getColor("Red").draw();
        factoryProducer.getFactory("shape_factory").getShape("circle").draw();

    }

}
时间: 2024-12-21 21:38:14

Java设计模式——抽象工厂模式的相关文章

JAVA设计模式--抽象工厂模式

抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关的代码.由应用程序调用以创建对应的具体产品的对象.在java中它由具体的类来实现.抽象产品角色:它是具体产品继承的父类或者是实现的接口.在java中一般

Java设计模式——抽象工厂模式(Abstract factory)

抽象工厂模式可以向客户提供接口,使得客户端在不必指定产品具体类型的情况下创建多个产品族中的产品对象. 系统的设计 采用抽象工厂模式设计出的系统类图如下: 从上图可以看出,抽象工厂模式涉及到角色: 抽象工厂角色(AbstractFactory):担任这个角色的是工厂方法模式的核心,它与应用系统的商业逻辑无关.通常使用Java接口或者抽象Java类实现,而所有的具体工厂类都必须实现这个Java接口或者继承这个抽象Java类. 具体工厂类(ConcreteFactory)角色:这个角色直接在客户端的调

Java设计模式-抽象工厂模式(Abstract Factory )

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码. 为工厂类做一个统一的父类接口,可用于扩展 因为抽象工厂不太好理解,先看看图,然后就和代码,就比较容易理解. 例子: public interface Sender { public void Send(); } 两个实现类

JAVA 设计模式 抽象工厂模式

用途 抽象工厂模式 (Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式是一种创建型模式. 结构 图-抽象工厂模式结构图 AbstractProduct : 声明一个接口,这个接口中包含产品对象类型. abstract class AbstractProductA {     public abstract void show(); } abstract class AbstractProductB {     public a

2.java设计模式-抽象工厂模式

抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一下产品等级与产品族:Cpu属于一种产品,Cpu有多种型号,比如Intel的.AMD的,它们都属于同一个产品等级,即同一类产品下边的不同系列或者品牌:而产品族是指位于不同产品等级结构中,功能相关联的产品组成的家族.比如对于Intel公司,这家公司生产的Cpu,也生产主板,内存,芯片组等相关联产品组成一

Java设计模式-抽象工厂模式(Abstract Factory)

目的: 提供一个接口来创建一族相互依赖的对象,不用明确指出实体类. 什么时候用: 一个系统不应当依赖于产品类实例如何被创建.组合和表达的细节,这对于所有形态的工厂模式都是重要的. 这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品. 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来. 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现. 实际的例子: javax.xml.parsers.DocumentBuilderFactory

Java研究之学习设计模式-抽象工厂模式详解

 简介:          当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产[1] 品角色都有两个具体产品.抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化.每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式针对的是多个产品等级结构.(摘自百度百科) 话语说得太抽象,程序员最好的表示方式

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工

浅析JAVA设计模式之工厂模式(一)

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式