定义:有一个工厂对象决定创建那种产品类的实例
使用场景
1,工厂类负责创建的对象比较少;
2,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)并不关心

只需要传入一个正确的参数,就可以获取你所需要的对象而不需要知道其创建的细节(对用户透明)

1,工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
2,违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
3,简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

角色
1,Factory:根据参数创建不同的产品(提供方法创建产品实例)
2,AbstractProduct:抽象产品,具体产品都需要遵循的规范
3,ConcreteProduct:具体产品

例子

package com.llb.factory.simpleFactory;import com.llb.factory.simpleFactory.impl.HuaWei;
import com.llb.factory.simpleFactory.impl.Iphone;
import com.llb.factory.simpleFactory.impl.OPPO;
import com.llb.factory.simpleFactory.impl.XiaoMi;/*** 普通工厂*/
public class PhoneFactory {public static Phone createPhone(String type){switch (type){case "XM":return new XiaoMi();case "HW":return new HuaWei();case "Iphone":return new Iphone();case "OPPO":return new OPPO();default:System.out.println("无效输入");return null;}}
}package com.llb.factory.simpleFactory;/*** 抽象手机产品*/
public interface Phone {void function();
}package com.llb.factory.simpleFactory.impl;import com.llb.factory.simpleFactory.Phone;/*** 具体的手机厂商的手机*/
public class XiaoMi implements Phone {@Overridepublic void function() {System.out.println("=== XiaoMi ===");}
}package com.llb.factory.simpleFactory.impl;import com.llb.factory.simpleFactory.Phone;/*** 具体的手机厂商的手机*/
public class OPPO implements Phone {@Overridepublic void function() {System.out.println("=== OPPO ===");}
}package com.llb.factory.simpleFactory.impl;import com.llb.factory.simpleFactory.Phone;/*** 具体的手机厂商的手机*/
public class Iphone implements Phone {@Overridepublic void function() {System.out.println("=== Iphone ===");}
}package com.llb.factory.simpleFactory.impl;import com.llb.factory.simpleFactory.Phone;/*** 具体的手机厂商的手机*/
public class HuaWei implements Phone {@Overridepublic void function() {System.out.println("=== HuaWei ===");}
}package com.llb.factory.simpleFactory;public class Client {public static void main(String[] args) {/*通过手机工厂生产手机传入想要生产的手机的品牌获取对应的手机商*/Phone xm = PhoneFactory.createPhone("OPPO");// 手机商生产手机xm.function();}
}

简单工厂(SimpleFactory)相关推荐

  1. 简单工厂(SimpleFactory)模式简介

    简单工厂模式是最简单的模式了,也是我们打开教材的第一个模式. 一, 简单工厂模式的定义. 简单工厂模式是这样的: 建立1个工厂类, 这个类有1个静态方法, 根据条件(参数)的不同返回不同的同1个类族的 ...

  2. 简单工厂SimpleFactory

    简单工厂SimpleFactory public interface Fruit {/*** 种植*/public void plant();/*** 生长*/public void grow();/ ...

  3. 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory

    为什么80%的码农都做不了架构师?>>>    几点说明 永远不要纠结于在什么时候使用什么模式 永远不要纠结于什么模式适用于什么情景 永远不要去死记任何的模式 并不是说,23种设计模 ...

  4. 《研磨设计模式》chap2 简单工厂simplefactory

    1. 不用工程模式,直接生成类 //某个接口(通用的.抽象的.非具体的功能的) public interface Api {/*** 某个具体的功能方法的定义,用test1来演示一下.* 这里的功能很 ...

  5. Java设计模式 -- 简单工厂模式(SimpleFactory)

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...

  6. 设计模式(3)--SimpleFactory( [1] 简单工厂模式)--创建型

    1.模式定义: 简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 2.模式特点: 实现方式的 ...

  7. 设计模式-简单工厂模式(SimpleFactory)

    简单工厂模式: 被创建的实例通常具有共同的父类.如在农场中 根据水果名称获取水果. 有工厂角色.抽象产品角色.具体产品角色 public interface IFruit{void Harvest() ...

  8. 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

    本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...

  9. 设计模式之简单工厂模式

    一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式.   但是它是理解其它的工厂模式的一个很好 ...

最新文章

  1. [浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一)
  2. C# 2.0 锐利体验
  3. 金蝶kiss对计算机软件的要求,金蝶软件的产品适用范围分析
  4. vim的简单使用及配置
  5. 【学习】013 Servlet、Cookie、Session的简述
  6. Vue学习计划基础笔记(六) - 组件基础
  7. 装饰者模式的应用:react高阶组件和ES6 装饰器
  8. 结巴分词1--结巴分词系统介绍
  9. 图像导入裁剪与灰度化
  10. 爱站网关键词挖掘查询工具-批量网站关键词挖掘导出软件免费下载
  11. 机器学习误差计算及评估指标
  12. 格式化的硬盘能恢复吗 硬盘格式化以后能恢复吗
  13. Pytorch构建Transformer实现英文翻译
  14. PaddlePaddle飞浆搭建和机器学习文字识别
  15. 负电阻_三极管单管震荡电路
  16. C语言 正序分解整数
  17. 关于长尾应用的一些思考
  18. 2021秋招面试经历----硬件工程师
  19. NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized“
  20. 中国怪企 许昌怪人----胖东来

热门文章

  1. 微软Power Platform在中国市场正式商用 无缝衔接微软智能云“三驾马车”
  2. 深入理解JVM——(二)搞定JVM垃圾回收就是这么简单
  3. Javascript实现数组排列组合
  4. 深圳特区报 | 可见光通信与光计算:华创芯光,在国际竞争中抢占行业制高点
  5. Miniconda软件安装教程(Linux)
  6. Python函数定义相关+“类”作为函数参数
  7. 使用xlsxwriter库将数据存储到excel
  8. Python+Requests实现接口自动化
  9. SpringMVC 过滤器Filter使用解析
  10. ZYCH自由策划企业网站管理系统