博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式1 - 简单工厂模式
阅读量:6969 次
发布时间:2019-06-27

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

设计模式1 - 简单工厂模式

工厂模式介绍

工厂模式是java中最常用的设计模式之一,它属于创建型模式,它提供一种创建对象的最佳方式。在客户端创建对象的时候,不直接暴露对象的创建(直接new该类), 它通过一个共同的接口来指向新创建的对象。相当于把该对象封装在一个类里面,用最外层的类去得到被封装类的对象。

在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

模式结构

在简单工厂中,包含如下角色:

Factory:工厂角色

这个角色主要封装,创建所有实例的内部逻辑。

Product:抽象产品角色

它是所有对象的基类,主要负责描述所有实例所共有的公共接口。就是把共同的方法抽取出来。不同的子类去继承这个父类,根据不同的需求来自己实现公共方法的逻辑。

ConcreteProduct:具体产品角色

这个就是我们要的创建目标,根据不同的需求去创建不同的角色,去继承父类就行了。

下面是类图的表示:

根据不同的参数,就创建不同的实例对象。

代码

Factory:

public class Factory {

/** * 根据输入的名字来决定实例化哪个类 * @param proName * @return */public Product createProduct(String proName) {    Product product = null;    if ("A".equals(proName)) {        product = new ConcreteProductA();    } else if ("B".equals(proName)) {        product = new ConcreteProductB();    }    return product;}复制代码

} Product:

public abstract class Product {

/**  * 所有子类的共同方法,抽象出基类  */ protected abstract void comMethod();复制代码

} ConcreteProduct: 具体类A

/**

  • @author Stone

  • @version V1.0

  • @description: 具体的类A

  • @date 9/22/18 09:56

  • @email */ public class ConcreteProductA extends Product{

    @Override protected void comMethod() { System.out.println("具体的类:ConcreteProductA"); } } 具体类B

/**

  • @author Stone
  • @version V1.0
  • @description: 具体的类B
  • @date 9/22/18 09:57
  • @email */ public class ConcreteProductB extends Product{ @Override protected void comMethod() { System.out.println("具体的类:ConcreteProductB"); } } 测试代码

public class Test {

public static void main(String[] args) {    Factory factory = new Factory();    Product product = factory.createProduct("A");    product.comMethod();    product = factory.createProduct("B");    product.comMethod();}复制代码

}

-打印输出结果:

具体的类:ConcreteProductA 具体的类:ConcreteProductB 简单工厂模式的优点 可以根据不同的标示去实例不同的产品类型。客户端不负责创建对象的逻辑,一切都有工厂内部逻辑决定。

简单工厂模式的缺点 后续的扩展比较麻烦,如果需要额外新增产品,则需要在工厂中添加相应的判断。会造成if else 过多,不利于系统的扩展和维护。

参考链接:

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

你可能感兴趣的文章
我的友情链接
查看>>
win8下使用vagrant安装部署Linux虚拟环境出错的问题解决
查看>>
JQuery的过滤选择器
查看>>
被动接口在rip,eigrp,ospf中的应用
查看>>
redhat6.3下安装drbd
查看>>
tomcat和系统时间不一致的问题
查看>>
Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)
查看>>
iOS保存数据的4种方式
查看>>
apk反编后不作任何修改回编出错
查看>>
分享我对领域驱动设计(DDD)的学习成果
查看>>
oracle安装简洁步骤
查看>>
大型网站图片服务器架构的演进
查看>>
货币转换 I
查看>>
Cisco 划分VLAN
查看>>
写在最前
查看>>
使用zabbix监控Nginx活动状态--Part1
查看>>
spring的applicationContext.xml
查看>>
安全重要还是隐私重要?面部识别技术帮助警方发现枪击案枪手
查看>>
存preference
查看>>
建立基于虚拟用户的vsftpd服务
查看>>