深入浅出设计模式之工厂模式
随着工作经历的不断增加,每一个程序员都不可避免的会涉及到从一个普通程序员成长为一个高级或资深程序员的过程。在这个工程中,需要学习很多更加深入的知识,这其中就包括针对代码结构的设计和优化的思想,而培养这种思想的前提就是需要学习设计模式。在接下来的一段时间内,本人将逐一分享一些设计模式的经验。希望对各位学习设计模式有一些帮助。
工厂模式
工厂模式定义:提供创建一组对象的标准接口。
如何使用?
工厂模式应该是任何一个系统中使用最多的设计模式之一,为什么说工厂模式最为常用,原因很简单,因为工厂模式的作用就是替代我们的代码中出现new关键字对一个对象的创建,工厂模式就是用来创建对象。
一般情况下,我们创建一个对象,使用如下代码:
Node node = new Node();
如果我们需要传入构造参数,创建的代码如下:
Node Node = new Node(参数);
但是,在很多情况下,我们创建一个对象都不是简单的属于参数就可以完成的,比如:查询数据,或者通过配置文件获取一些信息等,这就导致了一个类的构造函数中需要实现较多的功能,这样不利用代码优雅设计,代码极为难看。
为什么说,这种情况下代码极为难看。很多人都知道,在程序设计中,Java提倡面向对象原则,而面向对象原则有提倡分派和封装。尽量将较长的代码段分派到各个单一职责的方法或者接口中去实现,这一点也是Java中提倡的单一职责原则。这样做降低了代码修改的难度,如果需要修改代码,只需要修改一处,不会导致牵一发而动全身。
下面使用一些例子来说明工厂方法的使用:
首先建立创建Node的工厂类:
public class NodeFactory {
public Node create(int type) {
if (type == 1) {
return new NodeA();
} else if (type == 2) {
return new NodeB();
} else {
throw new RuntimeException("Error Type: " + type);
}
}
}
这样来初始化Node对象的直接好处就是,在我们需要初始化Node归到一个地方来实现,这样就可以方便的修改Node对象初始化的过程。同样也减少了出现错误的几率,必进事情越少做,越不容易犯错误。
工厂模式分为两种:工厂方法模式和抽象工厂模式
在上边的例子中,我们实现的是工厂方法模式,如果创建的对象复杂度升高,这个时候就需要使用抽象工厂模式。具体来看一下代码:
这里假设,Node有连个实现类NodeA和NodeB,同样Node2也有两个实现类Node2A和Node2B,那么我们将上列中的Factory变成抽象工厂类实现,实现抽象工厂模式
public abstract class AbstractFactory {
public abstract Node createNode();
public abstract Node2 createNode2();
class NodeAFactory extends AbstractFactory {
@Override
public Node createNode() {
return new NodeA();
}
@Override
public Node2 createNode2() {
return new Node2B();
}
}
class NodeBFactory extends AbstractFactory {
@Override
public Node createNode() {
return new NodeB();
}
@Override
public Node2 createNode2() {
return new Node2B();
}
}
}
从上面看,我们实现了一个抽象工厂,分别产生NodeA和Node2A的工厂,和NodeB和Node2B的工厂。至此,我们已经详细介绍了工厂模式的使用,这里的例子只是简单的实现。在实际的生成环境的系统中,工厂模式往往还可以结合其他模式一起使用,比如享元模式。这些实现我们可以在后续的讲解中提及到。
分享到:
相关推荐
深入浅出设计模式,比head first更易懂,共讲解了22种设计模式: 工厂模式 单例模式 建造模式 原型模式 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 责任链模式 命令模式 解析器模式 迭代器...
深入浅出设计模式 pdf,逐步深入的介绍抽象工厂模式、享元模式、门面模式、组合模式、装饰模式等众多常用设计模式的详细讲解,对以后从事编程都有好处。
1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...
1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...
单态模式和简单工厂模式 工厂方法模式 抽象工厂模式 代理模式 代理模式之动态代理 策略模式 建造模式 门面模式
话说十年前,有一个暴发户,他家有三辆汽车——Benz 奔驰、Bmw 宝马、Audi 奥迪, 还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上 Benz 车后跟司机说“开奔驰车!...基础来引入我们本文的主题:工厂模式
深入浅出java设计模式(高清中文PDF)
深入浅出设计模式 话说十年前,有一个暴发户,他家有三辆汽车——Benz 奔驰、Bmw 宝马、Audi 奥迪, 还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz 车后跟司机说“开奔驰车!”, 坐上Bmw 后他说“开...
将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载。
├─第一章 旭瑶-小滴架构师成长系列软件设计模式课程介绍 │ 1.2设计模式全家桶课程大纲速览.mp4 │ ├─第二章 想成为架构师的你,不可不知道的设计模式精髓 │ 2.1设计模式的六大原则你知道多少.mp4 │ 2.3...
深入浅出设计模式中文版,大家想要吗?里面介绍了各种大家常用的模式,而且是中文版
NULL 博文链接:https://quicker.iteye.com/blog/607944
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
设计模式
很详细的讲述了工厂模式,包括静态工厂模式,工厂方法模式,抽象工厂模式等等以及其他的一些设计模式,对于一个了解设计模式的人是不错的选择!