设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

java设计模式(1):简单工厂模式(Simple Factory)

导读:设计模式主要分三个类型:创建型、结构型和行为型。工厂模式属于创建型的设计模式工厂模式主要是为创建对象提供过渡接口,以便创建对象具体过程屏蔽隔离起来,达到提高灵活性的目的。其中工厂模式又分为三类1)简单工厂模式(Simple Factory)2)工厂方法模式(Factory Method)3)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模...。。。

设计模式主要分三个类型:创建型、结构型和行为型。

工厂模式属于创建型的设计模式

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

其中工厂模式又分为三类

1)简单工厂模式(Simple Factory)

2)工厂方法模式(Factory Method)

3)抽象工厂模式(Abstract Factory)

这三种模式从上到下逐步抽象,并且更具一般性。

GOF在《设计模式》一书中讲工厂模式分为两类:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory),

将简单工厂模式(Simple Factory)看做工厂方法模式(Factory Method)的一种特例,两者归为一类。

 

下面我们来介绍下简单工厂模式(Simple Factory)

简单工厂模式又称作静态工厂方法模式。重命名上就可以看出这种模式一定很简单,它存在的目的很简单:定义一个用户创建对象的接口。

先看看它的组成

1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2)抽象产品角色:它一般是由具体产品继承的父类或者实现的接口。在java中它往往由一个抽象类或者接口实现。

3)具体产品角色:工厂类所创建的对象就是此角色的实例。在java中它往往由一个具体类实现。

 

抽象产品角色(我们定义了一个打印机)

public interface Printer{ public void out();  public void getData(String msg);}


具体产品角色(我们定义两个产品,一个是普通打印机,一个是高速打印机)

/** * 普通打印机 */public class CommonPrinter implements Printer{ private  final int MAX_CACHE_LINE = 10; private String[] printData = new String[MAX_CACHE_LINE];  private int dataNum = 0; public void getData(String msg) {  if(dataNum >= MAX_CACHE_LINE)  {   System.out.println("输出队列已满,添加失败");  }  else  {   printData[dataNum++] = msg;  } } public void out() {  while(dataNum>0)  {   System.out.println("普通打印机打印: "+printData[0]);      System.arraycopy(printData,1,printData,0,--dataNum);  } }}/** * 高速打印机 */public class BetterPrinter implements Printer{ private  final int MAX_CACHE_LINE = 10; private String[] printData = new String[MAX_CACHE_LINE * 2];  private int dataNum = 0; public void getData(String msg) {  if(dataNum >= MAX_CACHE_LINE * 2)  {   System.out.println("输出队列已满,添加失败");  }  else  {   printData[dataNum++] = msg;  } } public void out() {  while(dataNum>0)  {   System.out.println("高速打印机打印: "+printData[0]);      System.arraycopy(printData,1,printData,0,--dataNum);  } }}


 

 最后是测试了,我们定义一台计算机,由它调用工厂去生产我们需要的打印机。需要什么类型的打印机,就给工厂传入对应的类型,由工厂返回我们需要的打印机。

public class Computer{ private Printer out; public Computer(Printer out) {  this.out = out; } public void keyIn(String msg) {  out.getData(msg); } public void print() {  out.out(); } public static void main(String[] args) {  PrinterFactory of = new PrinterFactory();    Computer c = new Computer(of.getPrinter("common"));    c.keyIn("hello");  c.keyIn("world");    c.print(); }}

打印结果:

普通打印机打印: hello
普通打印机打印: world


这便是简单工厂模式了,怎么样使用起来简单吧,那么它带来了什么好处呢?

首先使用了简单工厂模式后,我们的程序不在“有病”,更加符合现实中的情况,而且客户端避免除了直接创建产品对象的责任,而仅仅负责“消费”产品

 

(编辑: dreamsunday)

网友评论
相关文章