java设计模式之简单工厂模式
简单工厂模式的定义:简单工厂模式又叫静态工厂方法模式,简单来说,简单工厂模式有一个具体的工厂类,可以生产出不同的产品,属于创建型设计模式。 简单工厂模式不在GoF23三种设计模式之列。 简单工厂模式的应用场景:简单工厂模式适合产品种类较少,也就是需要创建的对象较少的情况下运用。使用简单工厂模式创建可以让调用者不必关系对象的创建细节。 简单工厂模式案例: 比如某电子书商城,读者买了两本书,一本是java相关的,一本是c相关的。我们现在以读者阅读电子书为例,来看看简单工厂模式具体 实现以及用了它有什么好处。以下是代码实现: ?电子书接口: package com.liuyi.designmode.creational.simplefactory; /** * 电子书接口 */ public interface EBook { * 阅读方法 */ void read(); } ? c语言书籍实现: * C语言书籍 class CBook implements EBook{ @Override read() { System.out.println("阅读c语言书籍"); } } java书籍实现: * java语言书籍 class JavaBook EBook { @Override read() { System.out.println("阅读java语言书籍"); } } 创建书籍对象的工厂: * 创建不同种类的电子书的简单工厂类 class EBookFactory { static EBook createEBook(String type){ EBook eBook; switch (type){ case "java": eBook = new JavaBook(); break; case "c" CBook(); default: throw new RuntimeException("当前电子书不存在"); } return eBook; } } 测试类: * 简单工厂模式测试类 SimpleFactoryTest { static main(String[] args) { //比如我想读java的书籍 EBook java = EBookFactory.createEBook("java"); java.read(); } } 可以看到,调用者不需要知道对象具体是如何创建的就能实现对象的创建,这样做降低了创建对象与程序的耦合性。举个例子,比如我们查看 书的价格的、查看书的总字数,查看书的总页数等等操作的时候,前提条件都需要创建一个对象,这样我们在程序种就会出现很多地方new一个 对象的代码,一旦我们new 对象的代码根据业务的改变发生变化的时候,我们就需要去每个地方都改一遍,这样就和程序的耦合性太高了,不利于 程序的扩展和维护。但是我们用简单工厂模式就不一样了,我们只需要修改工厂类的代码即可完成代码的扩展。 代码优化:此时调用者创建对象是很简单了,但是如果商城又上架一本c++类型的书籍,此时就需要修改工厂类的代码了,这显然不符合开闭原则。 因此我们可以用反射的技术继续对简单工厂类进行优化,代码如下: 工厂类修改如下: EBookFactory { static EBook createEBook(Class<? extends EBook> clazz){ EBook eBook = null; try { if(clazz!=){ eBook = clazz.newInstance(); } } catch (Exception e) { e.printStackTrace(); } eBook; } } 测试类修改如下: 比如我想读java的书籍 EBook java = EBookFactory.createEBook(JavaBook.); java.read(); } } 总结:简单工厂模式的优点: 简单工厂模式的结构简单,调用方便。对于外界给定的信息,可以很方便的创建出相应的产品。工厂和产品的职责区分明确。 简单工厂模式的缺点: 简单工厂模式的工厂类单一,负责所有产品的创建,但当产品基数增多时,工厂类的代码会非常臃肿,违背高聚合原则。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |