您的位置:首页 > 编程语言 > Java开发

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

2016-11-05 14:29 253 查看

写在最前面的话:

       这是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 {

@Override
public 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) 每此修改代码,都要重新编译。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息