首页 > 编程语言 >Java 设计模式:工厂模式

Java 设计模式:工厂模式

时间:2022-11-24 21:05:09浏览次数:50  
标签:Java 定义 class 工厂 Iphone Andriod 设计模式 public

目录

工厂模式(Factory Pattern)

所属:创建型模式,

适用时机:我们明确地计划不同条件下创建不同实例时。

实现

Java 工厂模式主要有三种形态:简单工厂模式(又称静态工厂模式)、工厂方法模式、抽象工厂模式。

简单工厂模式

实现方式:通过核心工厂类的静态方法,根据不同的参数来返回实现某一接口的不同类实例。

弊端:

  • 拓展性差,维护、新增产品时,都必须修改核心工厂类。
  • 如果产品之间存在复杂的层次关系,则工厂类必须拥有复杂的逻辑判断。
  • 整个系统过于依赖核心工厂类。

示例

下面是定义的接口与其实现:

// 定义产品接口
interface Product {
}
// 定义安卓手机类
class Andriod implements Product {
    public Andriod() {
        System.out.println("安卓手机被创建!");
    }
}
// 定义苹果手机类
class Iphone implements Product {
    public Iphone() {
        System.out.println("苹果手机被创建!");
    }
}

接下来定义核心工厂类:

// 定义工厂类
class SimpleFactory {
    public static Product factory(String className) {
        if ("Andriod".equals(className)) {
            return new Andriod();
        } else if ("Iphone".equals(className)) {
            return new Iphone();
        } else {
            return null;
        }
    }
}

最后即可通过不同参数来生成对应实例:

public class SimpleFactoryPatternDemo {
    public static void main(String[] args) {
        // 根据不同的产品生成产品
        SimpleFactory.factory("Andriod");
        SimpleFactory.factory("Iphone");
    }
}

工厂方法模式

实现方式:为工厂类定义接口,用多态来削弱工厂类的职责。

特点:将简单工厂模式创建对象的职责,分担到子工厂类中,子工厂互相独立,互相不受影响。

局限:当面对有复杂的树形结构时,就必须为每个产品创建一个对应的工厂类,当到达一定数量就会出现类爆炸。

示例

修改简单工厂模式示例的核心工厂类 SimpleFactory 为:

// 定义工厂接口
interface Factory {
    public Product create();
}
// 定义 Andriod 的工厂
class AndriodFactory implements Factory {
    public Product create() {
        return new Andriod();
    }
}
// 定义 Iphone 的工厂
class IphoneFactory implements Factory {
    public Product create() {
        return new Iphone();
    }
}

使用时,使用对应的工厂的 create 方法。

抽象工厂模式

适用时机:用于意在创建一系列互相关联或相互依赖的对象。

特点:在工厂方法基础上进行分类管理。

示例

// 定义 Andriod 接口
interface Andriod {
}
// 定义 Iphone 接口
interface Iphone {
}
// 定义安卓手机 - A 类
class AndriodA implements Andriod {
    public AndriodA() {
        System.out.println("安卓手机 - A 被创建!");
    }
}
// 定义安卓手机 - B 类
class AndriodB implements Andriod {
    public AndriodB() {
        System.out.println("安卓手机 - B 被创建!");
    }
}
// 定义苹果手机 - A 类
class IphoneA implements Iphone {
    public IphoneA() {
        System.out.println("苹果手机 - A 被创建!");
    }
}
// 定义苹果手机 - B 类
class IphoneB implements Iphone {
    public IphoneB() {
        System.out.println("苹果手机 - A 被创建!");
    }
}

核心工厂:

// 定义工厂
interface Factory {
    public Andriod createAndriod();
    public Iphone createIphone();
}
// 创建型号 A 的产品工厂
class FactoryA implements Factory {
    public Andriod createAndriod() {
        return new AndriodA();
    }
    public Iphone createIphone() {
        return new IphoneA();
    }
}
// 创建型号 B 的产品工厂
class FactoryB implements Factory {
    public Andriod createAndriod() {
        return new AndriodB();
    }
    public Iphone createIphone() {
        return new IphoneB();
    }
}

接下来,就可以根据不同型号,选择不同的工厂来创建实例。

参考

  • [1] 千峰教育高校产品研发部.Java 语言程序设计[M].第2版.北京:清华大学出版社.2020.150~155

标签:Java,定义,class,工厂,Iphone,Andriod,设计模式,public
From: https://www.cnblogs.com/meyok/p/16923280.html

相关文章