Java设计模式_工厂模式

简单工厂模式

简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。(不修改代码的话,是无法扩展的。 )

 1 //产品接口
 2 interface IProduct {
 3     public void productName();
 4 }
 5
 6 //产品实体类
 7 class ProductA implements IProduct {
 8     @Override
 9     public void productName() {
10         System.out.println("product A");
11     }
12 }
13
14 class ProductB implements IProduct {
15     @Override
16     public void productName() {
17         System.out.println("product B");
18     }
19 }
20
21 //工厂类
22 class Factory {
23     public IProduct create(String productName) {
24         switch (productName) {
25         case "A":
26             return new ProductA();
27         case "B":
28             return new ProductB();
29         default:
30             return null;
31         }
32     }
33 }
34
35 //测试类
36 class Client {
37
38     public static void main(String[] args) {
39         Factory factory = new Factory();
40         IProduct productA = factory.create("A");
41         productA.productName();
42
43         IProduct productB = factory.create("B");
44         productB.productName();
45     }
46 }
47
48 输出 :
49 product A
50 product B 

工厂方法模式

工厂方法是针 对每一种产品提供一个工厂类 。通过不同的工厂实例来创建不同的产品实例。 (在同一等级结构中, 支持增加任意产品 。)

 1 //产品接口
 2 interface IProduct {
 3     public void productName();
 4 }
 5
 6 //产品实体类
 7 class ProductA implements IProduct {
 8     @Override
 9     public void productName() {
10         System.out.println("product A");
11     }
12 }
13 class ProductB implements IProduct {
14     @Override
15     public void productName() {
16         System.out.println("product B");
17     }
18 }
19
20 //工厂接口
21 interface IFactory {
22     public IProduct create();
23 }
24
25 //工厂实体类
26 class FactoryA implements IFactory {
27     @Override
28     public IProduct create() {
29         return new ProductA();
30     }
31 }
32 class FactoryB implements IFactory {
33     @Override
34     public IProduct create() {
35         return new ProductB();
36     }
37 }
38
39 //测试类
40 class Client {
41     public static void main(String[] args) {
42         IFactory factoryA = new FactoryA();
43         IProduct productA = factoryA.create();
44         productA.productName();
45
46         IFactory factoryB = new FactoryB();
47         IProduct productB = factoryB.create();
48         productB.productName();
49     }
50 }
51
52 输出:
53 product A
54 product B

抽象工厂模式

抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
(应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。)
和工厂方法的区别是: 抽象工厂往往有多种方法,可以生产多种产品,即产品簇。

 1 //抽象工厂接口
 2 interface AbstractFactory {
 3     public IProductA createProductA();
 4     public IProductB createProductB();
 5 }
 6
 7 //工厂实体类
 8 class FactoryA implements AbstractFactory {
 9     @Override
10     public IProductA createProductA() {
11         return new ProductA1();
12     }
13
14     @Override
15     public IProductB createProductB() {
16         return new ProductB1();
17     }
18 }
19 class FactoryB implements AbstractFactory {
20     @Override
21     public IProductA createProductA() {
22         return new ProductA2();
23     }
24
25     @Override
26     public IProductB createProductB() {
27         return new ProductB2();
28     }
29 }
30
31 //产品接口
32 interface IProductA {
33     public void productName();
34 }
35 interface IProductB {
36     public void productName();
37 }
38
39 //产品实体类
40 class ProductA1 implements IProductA {
41     @Override
42     public void productName() {
43         System.out.println("product A1");
44     }
45 }
46 class ProductA2 implements IProductA {
47     @Override
48     public void productName() {
49         System.out.println("product A2");
50     }
51 }
52 class ProductB1 implements IProductB {
53     @Override
54     public void productName() {
55         System.out.println("product B1");
56     }
57 }
58 class ProductB2 implements IProductB {
59     @Override
60     public void productName() {
61         System.out.println("product B2");
62     }
63 }
64
65 //测试类
66 class Client {
67     public static void main(String[] args) {
68         AbstractFactory factoryA = new FactoryA();
69         IProductA productA1 = factoryA.createProductA();
70         IProductB productB1 = factoryA.createProductB();
71         productA1.productName();
72         productB1.productName();
73
74         AbstractFactory factoryB = new FactoryB();
75         IProductA productA2 = factoryB.createProductA();
76         IProductB productB2 = factoryB.createProductB();
77         productA2.productName();
78         productB2.productName();
79     }
80 }
81
82 输出:
83 product A1
84 product B1
85 product A2
86 product B2
时间: 2024-08-25 03:29:04

Java设计模式_工厂模式的相关文章

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

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

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

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

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

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式. 1抽象工厂模式简介 抽象工厂 (Abstract Factroy) 模式:工具箱模式(kit).抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图. 图1.1 上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产.又例如下图: 图1.2 上图表示的是Button和Text两个不同产品的等级

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

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

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

Java设计模式:工厂模式

问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下不同的关系以及对应的设计模式 1)单一产品系,工厂只生产一种类型的产品 让我们简单构思一下简单的工厂生产模型,既然只有一个产品,那只需要一个车间就好了,一个车间分别生产三种不同种类的小汽车.好,下面看看简单工厂的设计模式. //定义小汽车接口:ICar.javapublic interface IC

由解耦引发出的 Java设计模式之工厂模式

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品: 这三种模式从上到下逐步抽象,并且更具一般性. GOF在<设计模式>一书中将工厂模式分为两类:工

Java设计模式之工厂模式2

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<