23种设计模式之——简单工厂方法模式

来源:互联网 发布:手包 知乎 编辑:程序博客网 时间:2024/06/06 13:11

写在最前面的话:

       这是dazhi,开博的第一篇博客,由于作者水平有限,文章难免有错误,希望各个博友多多指正,共同进步。

       好了,该是第一次写博客了,好吧,就从23中设计模式写起吧。首先第一篇要介绍简单工厂模式,在23中设计模式中,这应该是最好写的了,好,废话不对说,下面让我们开始吧。

简单工厂方法模式的类图如下:



        上图中的Creator拥有一个factory方法,用于创建产品类的对象,简单工厂方法模式的特点是仅仅有一个具体的(Concrete)的创建者,并且在此类中包含一个静态的工厂方法factory()。

简单工厂方法模式的各部分组成部分的意义说明:

(1) Creator:是简单工厂方法的核心,包含程序的业务逻辑,当客户端(Client)需要具体产品(ConcreteProduct)的时候,委托工厂类 (Product)来创建产品。

(2) Product:可以是接口或者抽象类,或者公共的超类。

(3) ConcreteProduct:实现或者继承了Product,用于产生具体的产品。

(4) Client:用户执行的一系列操作。

下面给出各个类的具体代码:

Client类,main函数,用于命令调取产品

public class Client {public static void main(String[] args) {// 生产一件产品Product product = Creator.getObj();// 获得产品的信息product.getCreatProductInfo();}}

Product类,一个产品接口,里面定义了一个抽象的方法,用于获取产品信息

public interface Product {abstract void getCreatProductInfo();}

ConcreteProduct类,用于生产一件具体的产品

public class ConcreteProduct implements Product {@Overridepublic void getCreatProductInfo() {String concreteProduct = "生产了一件具体的产品A";System.out.println(concreteProduct);}}

Creator类,委托工厂类创建产品

public class Creator {public static  Product getObj() {Product product = new ConcreteProduct();return product;}}


简单工厂方法的优点:

(1) 客户端不直接创建产品类对象,客户类(Client)只是产品对象的消费者。

(2) 简单工厂方法模式实现了责任分离。

(3) 用户可根据工厂类直接去创建所需的实例,不必关心具体的实现细节。

(4) 工厂类包含了创建对象的必要逻辑判断,根据客户端的选择动态实例化相关类,客户端没有具体的条件判断语句。

简单工厂方法的缺点:

(1) 每当增加新的产品时,都要修改工厂类的代码,这并不符合软件设计六大原则之一的开闭原则(OCP)。

(2) 由于Creator类的方法是静态的,所有方法不能被继承,也就不能设计为一个层次类。

(3) 每此修改代码,都要重新编译。

        总结一下:简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化。但由于其不符合开闭原则,当新产品增加到产品类中时,工厂方法就必须增加适当的条件,以便客户能够添加新的实例。下篇,将介绍工厂方法模式。






1 0
原创粉丝点击