数据源的创建比较复杂,对于复杂对象的创建,可以考虑使用简单工厂模式和工厂模式。下面介绍简单工厂模式和工厂模式。

简单工厂模式

简单工厂模式及时专门使用一个类来创建其他类的实例,被创建的额实例通常都有共同的父类。

使用步骤

步骤1. 创建抽象产品类,定义具体产品的公共接口

abstract class Product{public abstract void Show();
}

步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品

//具体产品类A
class  ProductA extends  Product{@Overridepublic void Show() {System.out.println("生产出了产品A");}
}//具体产品类B
class  ProductB extends  Product{@Overridepublic void Show() {System.out.println("生产出了产品C");}
}//具体产品类C
class  ProductC extends  Product{@Overridepublic void Show() {System.out.println("生产出了产品C");}
}

步骤3. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例

class  Factory {public static Product Manufacture(String ProductName){//工厂类里用switch语句控制生产哪种商品;
//使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。switch (ProductName){case "A":return new ProductA();case "B":return new ProductB();case "C":return new ProductC();default:return null;}}
}

步骤4. 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

//工厂产品生产流程
public class SimpleFactoryPattern {public static void main(String[] args){Factory mFactory = new Factory();//客户要产品Atry {//调用工厂类的静态方法 & 传入不同参数从而创建产品实例mFactory.Manufacture("A").Show();}catch (NullPointerException e){System.out.println("没有这一类产品");}//客户要产品Btry {mFactory.Manufacture("B").Show();}catch (NullPointerException e){System.out.println("没有这一类产品");}//客户要产品Ctry {mFactory.Manufacture("C").Show();}catch (NullPointerException e){System.out.println("没有这一类产品");}//客户要产品Dtry {mFactory.Manufacture("D").Show();}catch (NullPointerException e){System.out.println("没有这一类产品");}}
}

适应场景: 将对象创建和对象使用解耦,并屏蔽了创建可能的复杂过程,但由于创建的逻辑集中在工厂类,所以简单工厂适合需求变化不频繁的场景。
缺点 工厂类负责了所有产品的实例化,违反了单一原则。如果产品类型比较多,工厂类的代码比较大,不利于扩展。必须修改工厂类原有的代码,这违反了开闭原则。

简单工厂模式

工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。定义一个创建对象的接口,
让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

为什么要使用工厂模式?

创建对象的方式可以使用new关键字、反射、clone等方式,也可已使用工厂模式。对于创建比较复杂的对象,使用new关键字、反射、clone等方式创建存在如下缺点:
1.对象创建和对象使用职责耦合在一起。违反单一原则。
2.当业务扩展时,必须修改业务代码。违反开放关闭原则。

而使用工厂模式将对象的创建与使用进行解耦,屏蔽了创建对象可能的复杂过程,相对简单工厂模式,又具备有良好的扩展性和和维护性,其优点有:
1.对象的创建和使用解耦。
2.如果创建比较复杂,创建过程统一由工厂管理,减少了重复的代码,方便日后维护。
3.当业务扩展时,只需要添加工厂子类,符合开闭原则。

使用步骤

步骤1: 创建抽象工厂类,定义具体工厂的公共接口

abstract class Factory{public abstract Product Manufacture();
}

步骤2: 创建抽象产品类 ,定义具体产品的公共接口;

abstract class Product{public abstract void Show();
}

步骤3: 创建具体产品类(继承抽象产品类), 定义生产的具体产品;

//具体产品A类
class  ProductA extends  Product{@Overridepublic void Show() {System.out.println("生产出了产品A");}
}//具体产品B类
class  ProductB extends  Product{@Overridepublic void Show() {System.out.println("生产出了产品B");}
}

步骤4:创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;

//工厂A类 - 生产A类产品
class  FactoryA extends Factory{@Overridepublic Product Manufacture() {return new ProductA();}
}//工厂B类 - 生产B类产品
class  FactoryB extends Factory{@Overridepublic Product Manufacture() {return new ProductB();}
}

步骤5:外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例

//生产工作流程
public class FactoryPattern {public static void main(String[] args){//客户要产品AFactoryA mFactoryA = new FactoryA();mFactoryA.Manufacture().Show();//客户要产品BFactoryB mFactoryB = new FactoryB();mFactoryB.Manufacture().Show();}
}

结果

生产出了产品A
生产出了产品C

代码转自 https://www.jianshu.com/p/e55fbddc071c

简单工厂模式与工厂模式的区别相关推荐

  1. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

    工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面 ...

  2. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  3. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  4. 简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是设计模式的一类:对于设计模式这个概念 ...

  5. 简单工厂模式、工厂方法模式与抽象工厂模式的区别(转)

    虽然看完了<大话设计模式>,但是工厂模式的三种类型之间的差异,理解还不是非常透彻,那么本文就围绕三者间的差异性来阐述各自的优缺点. 简单工厂模式 (Simple Factory) 首先定义 ...

  6. UML图解简单工厂模式工厂方法模式抽象工厂模式区别

    简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...

  7. 简单工厂模式和工厂方法模式的区别

    1.简单工厂模式中包含判断什么对象的逻辑,而工厂方法模式则需要调用者判断要实例化什么具体类型的工厂进而创建出想要的对象.当增加新类时,简单工厂模式需要修改工厂类,而工厂方法模式不需要,因此工厂方法模式 ...

  8. 抽象工厂模式-与-工厂方法模式区别

    转自:http://blog.csdn.net/wangwenhui11/article/details/3955125 --------------------------------- 对于jav ...

  9. 抽象工厂模式java_面试官:说一下静态工厂模式,工厂方法模式,抽象工厂的区别吧...

    静态工厂模式 用生活中的场景类比一下这三种模式,假如你想学习Java视频,你得自己到处去找资料,找资料是一个繁琐的过程,过一段时间你又想学Python视频了,你还得去找资料.现在你在学校上学,你想学J ...

最新文章

  1. 【imx6】libipu.so.0说明
  2. PostgreSQL — Overview
  3. 洛谷P1162 填涂颜色
  4. PHP的TRUE|FALSE
  5. java eclipse 注释模板_Eclipse Java注释模板设置详解
  6. 算法笔记--二分图判定
  7. ffmpeg 分辨率 压缩_Ffmpeg 视频压缩的几个关键参数
  8. 未来智能穿戴把计算机织进纤维里,未来智能穿戴 把计算机“织”进纤维里
  9. 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。说明书弄丢了.脉冲,使能,方向,接第几引脚...
  10. python里的def方法中->代表什么意思
  11. 软件可靠性测试概念与应用
  12. 超文本咖啡壶控制协议
  13. 中通财报:“增收不增利”怪圈难破
  14. 手指在屏幕上滑动,红色的小球始终跟随手指移动。
  15. SQL语句中where 1=0是什么意思
  16. 关于主从复制的超详细解析(全)
  17. JS 实现数字滚动变化效果
  18. 清空缓冲区:fflush(stdin)、fflush(stdout)
  19. 到底微信公众号和头条号哪个更适合自媒体新人
  20. spring中的hibernate-validate数据校验

热门文章

  1. 如此可爱,焉能不爱?—我与在线作业不得不说的故事
  2. android 图表实现,Android实现图表绘制和展示
  3. java测试类写三角形_软件测试实验一——使用junit判断三角形
  4. 数据结构作业-严蔚敏-5.2.(3)
  5. 毕设java 电脑配件购物商城论文
  6. 四十种 智能合约 支持平台
  7. java设计模式之工厂模式(UML类图分析+代码详解)
  8. WebSecurityConfigurerAdapter简单分析
  9. scroll-view的描点跳转
  10. Arrays.asList 转换数组成list集合失败的原因