Java笔记:工厂模式

工厂模式主要是为创建对象提供接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式在《Java与模式》中分为三类:

  • 1)简单工厂模式(Simple Factory):不利于产生系列产品。
  • 2)工厂方法模式(Factory Method):又称为多形性工厂。
  • 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品。

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

简单工厂模式

在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式角色:

  • 工厂类
  • 抽象产品
  • 具体产品

简单工厂模式的优点如下:

  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
  • 客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
  • 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的缺点如下:

  • 工厂类中包括了创建产品类的业务逻辑,一旦工厂类不能正常工作,整个系统都要受到影响。
  • 系统扩展困难,一旦添加新产品就需要修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

举例:

 //抽象产品角色
public interface Car{
    public void drive();
}
//具体产品角色
public class Benz implements Car{
    public void drive() {
        System.out.println("Driving Benz ");
    }
}
public class Bmw implements Car{
    public void drive() {
        System.out.println("Driving Bmw ");
    }
}
//工厂类角色
public class CarFactory{
    //工厂方法.注意 返回类型为抽象产品角色
    public static Car create(String s)throws Exception{
        if(s.equalsIgnoreCase("Benz"))
            return new Benz();
        else if(s.equalsIgnoreCase("Bmw"))
            return new Bmw();
        else throw new Exception();
    }
}

工厂方法模式

在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。

工厂方法模式角色:

  • 抽象工厂:是具体工厂角色必须实现的接口或者必须继承的父类。
  • 具体工厂:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
  • 抽象产品:它是具体产品继承的父类或者是实现的接口。
  • 具体产品:具体工厂角色所创建的对象就是此角色的实例。

举例:

 //抽象产品角色
public interface Car{
    public void drive();
}
//具体产品角色
public class Benz implements Car{
    public void drive() {
        System.out.println("Driving Benz ");
    }
}
public class Bmw implements Car{
    public void drive() {
        System.out.println("Driving Bmw ");
    }
}
//抽象工厂类角色
public abstract class CarFactory{
    public abstract Car create();
}

public class BenzCarFactory extends CarFactory{
    public Car create(){
        return new Benz();
    }
}

public class BmwCarFactory extends CarFactory{
    public Car create(){
        return new Bmw();
    }
}

//测试类
public class Test {
    public static void main(String[] args) {
        CarFactory factory = new BenzCarFactory();
        Car m = factory.create();
        m.drive();
    }
}

抽象工厂模式

抽象工厂模式提供一个创建一系列或相互依赖的对象的接口,而无需指定它们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

举例:

//抽象工厂类
public abstract class AbstractFactory {
    public abstract Vehicle createVehicle();
    public abstract Weapon createWeapon();
    public abstract Food createFood();
}
//具体工厂类,其中Food,Vehicle,Weapon是抽象类
public class DefaultFactory extends AbstractFactory{
    @Override
    public Food createFood() {
        return new Apple();
    }
    @Override
    public Vehicle createVehicle() {
        return new Car();
    }
    @Override
    public Weapon createWeapon() {
        return new AK47();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        AbstractFactory f = new DefaultFactory();
        Vehicle v = f.createVehicle();
        Weapon w = f.createWeapon();
        Food a = f.createFood();
    }
}
时间: 2024-09-29 21:15:14

Java笔记:工厂模式的相关文章

菜鸟饼 能不能用java的工厂模式处理下面的问题。 求代码 和 注释

问题描述 菜鸟饼 能不能用java的工厂模式处理下面的问题. 求代码 和 注释 interface Animal{ public void say(); } class Mammal implements Animal{ public void say(){ System.out.println("哺乳动物"); } } class Reptiles implements Animal{ public void say(){ System.out.println("爬行动物&

Java简单工厂模式

简单工厂模式 SimpleFactory,适用于业务相对较简单地情况,少扯闲话,先上code: ~~ ICar.java ~~  抽象产品角色接口 /**  * @author VerpHen  * @date 2013年9月10日  上午9:36:19  */ package org.verphen.simpleFactory; /*抽象产品角色接口:汽车Car*/ public interface ICar {  /* 汽车启动 */  public void run();  /* 汽车停止

Java设计模式(三—四)----工厂模式

Java设计模式 工厂模式 一.引言 二.分类 三.简单工厂模式 四.工厂方法模式 五.抽象工厂模式 六.和工厂方法模式区别 七.总结 工厂模式 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象.在这些情况,新对象的建

Java设计模式编程中简单工厂与抽象工厂模式的使用实例_java

简单工厂模式类图 通过一个工厂类,以一个条件来创建对应的对象 //业务功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("加法&qu

怎么简单java工厂模式?谁知道

问题描述 怎么简单java工厂模式?谁知道 怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式?????? 解决方案 class User { .... } class UserSimpleFactory { public static User GetUser() { return new User(); } } 解决方案二: Java简单工厂模式Jav

java设计模式之简单工厂模式简述_java

简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.  简单工厂模式的UML图  简单工厂模式代码学习简单工厂模式的时候我用的是一个与人类有相关的例子.人类在世界分为男人和女人,首先定义一个Human产品的抽象接口  /** * This is factory patter package */ package com.roc.factory; /**

Java设计模式编程中的工厂方法模式和抽象工厂模式_java

工厂方法模式 动机 创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展. 而且,有些对象的创建可以需要用到复合工厂访问不到的信息,所以,定义一个工厂接口,通过实现这个接口来决定实例化那个产品,这就是工厂方法模式,让类的实例化推迟到子类中进行. 目的 1. 定义一个接口,让子类决定实例化哪个产品. 2. 通过通用接口创建对象. 实现 1. 产品接口和具体产品很好理解. 2. 工厂类提供一个工厂方法,返回一个产品对象.但是这个工厂方法是

java设计模式之简单工厂模式_java

在编写一个计算器程序时,可以将业务逻辑和显示分离,业务逻辑封装为一个类(封装):如果要新添加一种运算,可以先创建一个Operation的基类,然后各种运算从Operation类继承,并实现GetResult()虚函数,这时添加新的运算只需要派生一个新的类,即不需要之前的运算参与编译.如何让计算器知道我是希望使用哪种运算呢?应该考虑单独的类来做这个创造实例的过程,这就是工厂.创建一个OperationFactory类,传入参数,函数createOperate就可以实例化出合适的对象. Java代码

java设计模式之简单工厂模式

在编写一个计算器程序时,可以将业务逻辑和显示分离,业务逻辑封装为一个类(封装):如果要新添加一种运算,可以先创建一个Operation的基类,然后各种运算从Operation类继承,并实现GetResult()虚函数,这时添加新的运算只需要派生一个新的类,即不需要之前的运算参与编译.如何让计算器知道我是希望使用哪种运算呢?应该考虑单独的类来做这个创造实例的过程,这就是工厂.创建一个OperationFactory类,传入参数,函数createOperate就可以实例化出合适的对象. Java代码

轻松掌握Java工厂模式、抽象工厂模式_java

在面向对象编程的程序设计中,我们最常见的操作就是new对象,但在创建一个新对象的过程中,会有一些问题,比如我们需要注意创建新对象的实现细节,初始化一些必要的参数等.这样会让我们在讲更多的心思放在对象的创建上,而不是程序逻辑的实现上,严重拖延了我们的程序开发效率.工厂模式和抽象工厂模式的出现则完美解决了这个问题,让我们不再关心对象的创建,更多的在重心放在业务的实现上. 特点:     1.程序员直接通过工厂方法创建对象,不再关注创建对象的细节.     2.隐藏对象的实现细节,也有利于程序的安全性