博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【大话设计模式】工厂三姐妹
阅读量:2241 次
发布时间:2019-05-09

本文共 1188 字,大约阅读时间需要 3 分钟。

简单工厂

官方术语(我自己定义 的):

         专门定义一个来负责创建其他的类。

         简单工厂通过一个参数动态的实例化一个产品对象,被创建的实例通畅具有共同的父类或者接口

角色及其职责:

         工厂类(Creator)角色:简单工厂模式的主要组成部分,它负责通过传进来的参数实现创建所有对象实例。如OPerationFactory类

         抽象(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例的公共部分。如operation类

         具体产品(ConcreteProduct)角色:抽象产品类的子类,简单工厂模式的创建目标,,实现了抽象产品类中定义的所有接口方法。如operationADD类。

优缺点:

         优点:通过传参,借助工厂类实现,去实例化某个对象的具体类对象。这样大大方便了用户直接根据工厂类去创建实例,免去了了解实例是如何创建和组织的。

         缺点:之所以用户不用判断实例是怎样创建和组织的,是因为所以的逻辑判断都集中在工厂类,当添加新功能时,需要修改工厂类,从而违背了开放——封闭原则,因为扩展性不好。

        

工厂方法

官方定义:

        定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

角色及其职责:

         抽象工厂角色: 这是工厂方法模式的核心。是具体工厂角色必须实现的接口或者必须继承的父类。

         具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

         抽象产品角色:它是具体产品继承的父类或者是实现的接口。

         具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

优缺点:

         优点:改进了简单工厂中 的开放封闭性原则。

         缺点:增加了客户端和具体产品的依赖。

抽象工厂

官方定义:

         提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

角色及职责:

         抽象工厂:声明生成一系列抽象产品的方法

         具体工厂:执行生成一系列抽象产品的方法,生成一系列具体的产品

         抽象产品:为这一系列的某一种产品声明接口

         具体产品:定义具体工厂生成的具体产品的对象,实现产品接口

优缺点:

         优点;方便的更换产品的系别。就像把宝马车的牌子换成奔驰车的牌子。

         缺点:增加同一系别下产品非常的困难。

一句话解说工厂三姐妹区别:

         简单工厂:简单工厂的工厂类是一个静态的方法类,通过传参来实现对不同的对象实例化。

         工厂方法:为每一个产品提供一个工厂类,通过不同 的工厂来创建产品实例,例如大学生志愿者类,和社会志愿者类,正是因为如此,可以添加任意同等级产品。比如添加小学生志愿者,中学生志愿者等等。

         抽象工厂:他应该是一系列产品 的品牌。比如宝马车类,可以生产卡车,轿车等。奔驰车类,也可以生产卡车,轿车。在后期的扩展中增加一个车的品牌很简单,但是如果要增加一个品牌下的车型确实非常的复杂的,需要大量的修改,这就违背了封闭原则。

转载地址:http://rihbb.baihongyu.com/

你可能感兴趣的文章
Linux vi/vim编辑器常用命令与用法总结
查看>>
如何使用Git Bash Here,将本地项目传到github上
查看>>
eclipse git控件操作 回退到历史提交 重置 删除(撤销)历史的某次提交
查看>>
Oracle | 给表和字段添加注释
查看>>
java比较日期大小及日期与字符串的转换【SimpleDateFormat操作实例】
查看>>
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
查看>>
java中System.exit()方法
查看>>
在hbase shell中过滤器的简单使用
查看>>
java静态方法和实例方法
查看>>
java多线程并发去调用一个类的静态方法,会有问题吗?
查看>>
关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
查看>>
Java命令学习系列(一)——Jps
查看>>
java如何计算程序运行时间
查看>>
Java Calendar 类的时间操作
查看>>
Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer
查看>>
Eclipse下运行Maven项目提示缺少maven-resources-plugin:2.4.3
查看>>
Java 中int、String的类型转换
查看>>
比较两个JSON字符串是否完全相等
查看>>
删除JSONArray中的某个元素
查看>>
Linux下Tomcat重新启动
查看>>