创建型模式前奏之简单工厂模式

xiaoxiao2021-02-28  66

创建型模式是用来创建对象的,其中包含设计模式前奏说的共5个设计模式。简单工厂模式不属于23种设计模式,也不属于5种创建型模式,但它是创建型模式的基础,所以以创建型模式前奏为题说一下。

工厂模式我们经常见到,不管是数据库连接工厂还是服务器连接工厂或者其他,顾名思义,都是用来提供产品的。

简单工厂模式很容易理解,事物都是由简单一步步演化复杂的,就是我们编程最初始思想,就可以水到渠成写出简单工厂模式。

简单工厂模式UML类图如图所示:

手残党

上边两条线表示继承关系,下面两条线表示依赖关系。

实例代码如下:

抽象产品类

public abstract class Product { //公共方法 public void sameMethod(){ System.out.println("我是公共方法!"); } //定义抽象方法 public abstract void diffMethod(); } 具体产品A

public class ProductA extends Product{ @Override public void diffMethod() { System.out.println("A产品的方法!"); } } 具体产品B:

public class ProductB extends Product{ @Override public void diffMethod() { // TODO Auto-generated method stub System.out.println("B产品方法!"); } } 工厂类

public class Factory { public static Product getProduct(String productDesc){ if("A".equalsIgnoreCase(productDesc)){ return new ProductA(); }else if("B".equalsIgnoreCase(productDesc)){ return new ProductB(); } return null; } } 说明:简单工厂模式创建实例的方法通常是静态方法,因此又被称为静态工厂模式,它是一种 类创建模式。

Main类

public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Product product =Factory.getProduct(ReadProperties.readProperties("product_name")); product.sameMethod(); product.diffMethod(); } } 其中ReadProperties是一个辅助类,用来读取info.properties配置文件中关于产品的配置信息,根据该配置信息生产产品。

ReadProperties如下:

public class ReadProperties { private static final Properties properties = new Properties(); private static final String INFO_FILE = "info.properties"; static{ InputStream in =null; in = ReadProperties.class.getClassLoader().getResourceAsStream(INFO_FILE); try { properties.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /**** * 按照键值读取配置文件属性 * @param key * @return */ public static String readProperties(String key){ return (String)properties.get(key); } } 简单工厂模式说明:

简单工厂方法模式思想很好理解,就是建一个工厂类,提供一个静态工厂方法,根据参数返回不同的具体产品。如果要修改产品,无需修改源代码,修改配置文件即可。

但简单工厂模式也有缺点;

工厂类职责过重,工厂类出问题,全玩儿完。

创建逻辑十分不灵活,要增加新产品,就要修改工厂源代码的创建逻辑,破坏对修改关闭原则(这个弊端就是因为没有面向高层面向抽象面向接口编程造成的,且看下一篇工厂方法模式如何解决这个问题)。

如有错误,欢迎指正

end

转载请注明原文地址: https://www.6miu.com/read-81332.html

最新回复(0)