`

1. 创建型模式 (4) 工厂模式

阅读更多
1. 创建型模式 (4) 工厂模式

它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。[/b]

有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。

工厂模式一般分为三类:
  1. 简单工厂模式(Simple Factory)
  2. 工厂方法模式(Factory Method)
  3. 抽象工厂模式(Abstract Factory)
《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。
将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

工厂模式组成:
  1. 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。         
  2. 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
  3. 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品。


1. 简单工厂模式

package com.andrew.pattern0104.factory.modal01;
public class Circle {
    public void draw() {
        System.out.println("Inside Circle draw method.");
    }
}

package com.andrew.pattern0104.factory.modal01;
public class Rectangle {
    public void draw() {
        System.out.println("Inside Rectangle draw method.");
    }
}

package com.andrew.pattern0104.factory.modal01;
public class Square {
    public void draw() {
        System.out.println("Inside Square draw method.");
    }
}


package com.andrew.pattern0104.factory.modal01;
/**
 * 1. 简单工厂模式
 * 
 * @author andrew
 * @date 2018/06/12
 */
public class FactoryClient {
    public static void main(String[] args) {
        Circle shape1 = new Circle();
        shape1.draw();
        Rectangle shape2 = new Rectangle();
        shape2.draw();
        Square shape3 = new Square();
        shape3.draw();
    }
}


2. 标准工厂方法模式

package com.andrew.pattern0104.factory.modal02;
public interface Shape {
    void draw();
}


package com.andrew.pattern0104.factory.modal02;
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Rectangle draw method.");
    }
}

package com.andrew.pattern0104.factory.modal02;
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Square draw method.");
    }
}

package com.andrew.pattern0104.factory.modal02;
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle draw method.");
    }
}


package com.andrew.pattern0104.factory.modal02;
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (null == shapeType) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        }
        return null;
    }
}


package com.andrew.pattern0104.factory.modal02;
/**
 * 2. 标准工厂模式
 * 
 * @author andrew
 * @date 2018/06/12
 */
public class FactoryClient {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();
        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();
    }
}
运行结果:
Inside Circle draw method.
Inside Rectangle draw method.
Inside Square draw method.


3. 标准工厂方法模式

package com.andrew.pattern0104.factory.modal03;
public interface Shape {
    void draw();
}


package com.andrew.pattern0104.factory.modal03;
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle draw method.");
    }
}

package com.andrew.pattern0104.factory.modal03;
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Rectangle draw method.");
    }
}


package com.andrew.pattern0104.factory.modal03;
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Square draw method.");
    }
}


package com.andrew.pattern0104.factory.modal03;
public interface ShapeFactory {
    Shape getShape();
}

package com.andrew.pattern0104.factory.modal03;
public class CircleFactory implements ShapeFactory {
    @Override
    public Circle getShape() {
        return new Circle();
    }
}

package com.andrew.pattern0104.factory.modal03;
public class RectangleFactory implements ShapeFactory {
    @Override
    public Rectangle getShape() {
        return new Rectangle();
    }
}

package com.andrew.pattern0104.factory.modal03;
public interface ShapeFactory {
    Shape getShape();
}


package com.andrew.pattern0104.factory.modal03;
/**
 * 3. 严格工厂模式
 * 
 * @author andrew
 * @date 2018/06/12
 */
public class FactoryClient {
    public static void main(String[] args) {
        CircleFactory circleFactory = new CircleFactory();
        Circle circle = circleFactory.getShape();
        circle.draw();
        RectangleFactory rectangleFactory = new RectangleFactory();
        Rectangle rectangle = rectangleFactory.getShape();
        rectangle.draw();
        SquareFactory squareFactory = new SquareFactory();
        Square square = squareFactory.getShape();
        square.draw();
    }
}
运行结果:
Inside Circle draw method.
Inside Rectangle draw method.
Inside Square draw method.
分享到:
评论

相关推荐

    5. 创建型设计模式小结1

    创建型设计模式是软件设计模式中的重要类别,主要用于对象的创建。这些模式提供了一种在创建对象时封装变化的方式,使得代码更具可扩展性和可维护性。以下是对几种主要创建型设计模式的详细阐述: 1. 单例模式:...

    设计模式之创建型模式实验.docx

    【设计模式之创建型模式实验】 创建型设计模式主要关注对象的创建,它们提供了一种在不指定具体类的情况下创建对象的方式,增强了系统的灵活性和可扩展性。在本实验中,我们将探讨五种常见的创建型设计模式:简单...

    java 23种设计模式.zip

    1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...

    C#面向对象设计模式纵横谈-1.Singleton 单件(创建型模式)

    在提供的"1.Singleton 单件(创建型模式).wmv"视频文件中,可能详细讲解了Singleton模式的概念、实现方式、优缺点以及在C#中的具体应用实例,包括如何在实际项目中适当地使用和避免滥用Singleton模式。观看该视频可以...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    23种设计模式 (创建型,结构型,行为型)

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter ...

    C#设计模式源代码1.简单工厂模式 2.工厂方法模式 ...11种

    2. **工厂方法模式**:这也是创建型模式,与简单工厂模式不同,它定义了创建对象的接口,但让子类决定实例化哪一个类。这种模式允许系统在不修改代码的情况下,更换产品类或添加新产品。 3. **抽象工厂模式**:创建...

    设计模式之创建型模式

    本资源包"设计模式之创建型模式"包含了对工厂模式和单态模式的详细讲解,是初学者深入理解这些概念的理想资料。 首先,我们来看工厂模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂...

    3.java设计模式-创建者模式-抽象工厂模式.pdf

    抽象工厂模式是创建型设计模式中的一种,用于创建一系列相关或相互依赖的对象,而无需指定其具体类。抽象工厂模式强调产品的系列,对于有多个产品等级结构的系统非常有用。在抽象工厂模式中,一个工厂负责创建多个...

    1.java设计模式-创建者模式-简单工厂模式.pdf

    简单工厂模式是Java设计模式中创建型模式的一种,也被称为静态工厂方法模式。该模式的主要思想是由一个专门的工厂类来负责创建其他类的实例。简单工厂模式通过封装创建对象的过程,使得调用者无需关心对象的具体创建...

    Factory Method 工厂方法模式(创建型模式).wmv

    Factory Method 工厂方法模式(创建型模式).wmv

    设计模式1-创建型模式.doc

    工厂模式是一种常用的创建型设计模式,它提供了一个创建对象的接口,但具体的实例化工作由子类来完成。这种延迟初始化的策略使得系统更加灵活,易于扩展。 **二、抽象工厂模式**: 抽象工厂模式是工厂模式的扩展,...

    JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)

    **简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...

    新版设计模式手册 通俗的例子讲述设计的方法 1创建型模式 2结构型模式 3 行为模式 详细的设计说明

    这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...

    创建型模式uml类图EA文件.rar

    工厂方法模式是创建型模式的基础,它定义了一个创建对象的接口,但让子类决定实例化哪一个类。在这个例子中,用于实现四则运算的计算器。该模式使得计算器的实例化延迟到子类中,这样可以根据需求创建不同的计算器...

    设计模式之创建型模式.pdf

    创建型模式是软件工程中23种设计模式中的一类,主要目的是使得对象的创建与使用相分离,从而使系统更加灵活。创建型模式包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式等。这些模式各有其特定的...

    Java设计模式之创建型模式的几个小DEMO

    创建型模式是设计模式的一种分类,主要关注对象的创建过程,旨在抽象和隔离实例化过程,提高代码的灵活性和可复用性。本篇文章将详细探讨Java中的几种创建型设计模式,并通过具体的DEMO来阐述它们的应用。 1. 单例...

    C#面向对象设计模式纵横谈-创建型模式

    虽然不是严格意义上的创建型模式,但组合模式与创建型模式密切相关,因为它允许我们构建树形结构的对象。它将简单对象和组合对象以一致的方式处理,使客户端代码可以透明地操作单个元素或整个对象结构。 以上创建...

    设计模式原理与应用之创建型模式.pptx

    创建型模式是设计模式中的一个重要类别,它关注于对象的创建过程,帮助开发者封装创建细节,使系统独立于具体对象的创建方式。 1. **Singleton(单例模式)** 单例模式确保一个类只有一个实例,并提供全局访问点...

    Java设计模式之创建型模式源码以及文档

    创建型模式包括五种主要类型:单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。这些模式都致力于在不同的场景下提供对象的创建方式,以降低...

Global site tag (gtag.js) - Google Analytics