设计模式(二)工厂方法(创建型)

简介:

简单工厂模式 和 工厂方法模式 的区别

简单工厂模式

1

  • 工厂方法模式

2

比较这两个结构图,我们会发现,每个结构图右侧的红色边框内有很大的区别,前者的简单工厂没有子类,只有一些逻辑判断代码;而后者却又重新分出四个具体的工厂。到这里,两种模式的区别之一就出来了。那么,工厂方法模式中的逻辑判断代码在哪里呢?答案是:客户端。因为,在前一种模式中,要想修改添加功能就必须在工厂类中进行修改,而后者是修改客户端。

联系:

都有运算类、客户端,其中运算类都有相应的子类。

区别:

最明显:工厂方法模式需要有一个工厂接口。

其次,工厂方法模式关于工厂类处是具体的工厂而不是一个简单的工厂类。

最后,添加功能时,前者改动的是工厂类(为工厂类添加相关功能的子类),后者改动的是客户端(为相应功能增加判断逻辑的代码)。

用实例(计算器)说明就是:

(1)都有运算类(包括加减乘除四个子类)、都需要一个客户端

(2)工厂方法模式中的工厂类处,产生与运算类的子类相对应的四个具体的工厂:加法工厂、减法工厂、乘法工厂和除法工厂

(3)代码中要构建一个工厂接口,然后四个具体工厂去实现这个接口

代码说明一切 

//Animal .java
public abstract class Animal {
    public abstract void sleep();
}
//AnimalFactory .java

public interface AnimalFactory {
    public Animal createAnimal();
}
复制代码
//Dog.java

public class Dog extends Animal {

    @Override
    public void sleep() {
        System.out.println("dog sleep");

    }

}
复制代码
复制代码
//DogFactory .java

public class DogFactory implements AnimalFactory{

    @Override
    public Animal createAnimal() {
        return new Dog();
    }


}
复制代码
复制代码
public class AnimalTest {
    
    public static void main(String[] args) {
        AnimalFactory af = null;
        af =  new DogFactory();
        Animal dog = af.createAnimal();
        dog.sleep();
        
        AnimalFactory af2 =new PigFactory();
        Animal pig = af2.createAnimal();
        pig.sleep();
        
        AnimalFactory af3 = new DogFactory();
        Animal a = af3.createAnimal();
        a.sleep();
        af3 = new PigFactory();
        a = af3.createAnimal();
        a.sleep();

    }

}
复制代码

工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
    工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

   工厂方法模式退化后可以演变成简单工厂模式。 




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3838474.html,如需转载请自行联系原作者

相关文章
|
4月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
40 2
|
4月前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
19天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1月前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
1月前
|
设计模式 Java
23种设计模式,工厂方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】工厂方法模式是设计模式中的一种创建型模式,它主要解决的问题是对象创建的问题。它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。
31 3
|
2月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
22 1
|
2月前
|
设计模式 Java Spring
设计模式之工厂方法
设计模式之工厂方法
设计模式之工厂方法
|
7月前
|
设计模式 uml
解锁设计模式的神秘面纱:编写无懈可击的代码之工厂方法设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之工厂方法设计模式
22 0
|
4月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
102 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
4月前
|
设计模式 Go 开发工具
Golang设计模式——01工厂方法模式
Golang设计模式——01工厂方法模式
23 0