目录


代码讲解

产品功能接口:

/**
* 定义接口,抽象出产品都具有的功能
*/
interface Produce {
void method();
}

工厂类:

/**
* 我们下面的代码,模拟API
*/
public class SimpleFactory { //根据传进来的参数,返回对应的对象
public static Produce factory(String produce) throws Exception {
Produce produce1;
switch (produce) {
case "Piano":
produce1 = new Piano();
break;
case "Motorcycle":
produce1 = new Motorcycle();
break;
default:
produce1 = null;
} if (produce1 == null) {
throw new RuntimeException("没有参数对应的产品");
} else {
return produce1;
}
} }

具体实现类:

/**
* 钢琴类
*/
class Piano implements Produce { @Override
public void method() {
System.out.println("制造一架钢琴!");
}
} -------------------------------------------------------------- /**
* 摩托车类
*/
class Motorcycle implements Produce { @Override
public void method() {
System.out.println("制造一台摩托车!");
}
}

测试:

  /**
* 下的代码,模拟客户端,在客户端调用上面的API
*/
@Test
public void test() throws Exception {
// 客户端需要制造一台钢琴
Produce produce = SimpleFactory.factory("Piano");
produce.method(); // 客户端制造一台摩托车
Produce produce1 = SimpleFactory.factory("Motorcycle");
produce1.method(); }

UML图解简单工厂


优点

  • 隐藏具体实现
  • 解耦
  • 简单

分析优点

我们可以想象我们是一个API设计者 ,我们设计出一个框架,对外提供一些产品; 如何设计这个框架,是一个技术活,要尽量做到,对客户端 隐藏具体实现,同时满足简单解耦的特点;

我们讲的简单工厂模式,是可以满足我们的要求的,具体怎么满足的,请看下面的分析;

Produce1Produce2,这样的具体产品实现类,是API的设计者实现的,客户端的程序员是不用知道具体的实现的,他们只需要知道怎么用,就好了,这也就对客户端程序员 隐藏了具体实现

对于一些非常复杂,创建对象很麻烦的类,更能体现出 简单 的优点,因为怎么 new实例,都是在 API 设计者在 工厂类 里面自己帮客户端程序员new好了,客户端程序员只要直接使用这个对象就好了,不需要关心怎么new出来的

解耦 是如何实现的呢?其实很简单,因为客户端没有new xxx 这样的硬编码啊,后期就是API的设计者,把框架的代码,都改了,各种类(除了工厂类)的名字都换了,只要工厂类的名字、方法名字没变,客户端的代码,一行都不要动;这是多么的美滋滋;


缺点:

  • 扩展麻烦,需要改动现有的代码
  • 孤注一掷

其实仔细看代码,就能发现缺点,假如框架新增加了一些产品类,那么我们的工厂类的代码,就需要改动,这是爽了客户端程序员,麻烦了API设计者 ;

所有的逻辑都放在一个工厂里面,一旦这个类出现什么问题,那么就全GG ;


改进:

要想改变这种缺点,就需要使用 工厂方法模式 了 ;

java的简单工厂模式的更多相关文章

  1. java 之 简单工厂模式(大话设计模式)

    以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...

  2. Java实现简单工厂模式

    昨天看了一下设计模式,复习了一下简单工厂模式,做个笔记,浅淡一下我对简单工厂模式的理解.书上使用的是C#,因为我所学的是Java,所以本人就用Java实现了一遍.如果有讲的不对的地方,希望能够指出来. ...

  3. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

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

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

  5. 设计模式(java)--简单工厂模式之女娲造人.水果农场

    女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面. 女娲造人,这就是简单工厂模式的应用.  首先,在这个造人的思 ...

  6. Java设计模式-简单工厂模式(Static Factory Method)

    简单工厂模式(Static Factory Method) 简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  7. java设计模式--简单工厂模式

     简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大 ...

  8. java之简单工厂模式详解

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. java 创建简单工厂模式

    1.抽象类 package com.zpark.service; /** * 定义一个环境接口,所有省治理环境的方式都实现这个接口,并重写治理环境的方法 * @author tong * */ pub ...

随机推荐

  1. zabbix (一) 初识

    1.什么是zabbix? Zabbix由Alexei Vladishev创建,目前由Zabbix SIA积极开发和支持. Zabbix是一种企业级开源分布式监控解决方案. Zabbix是监控底层存储( ...

  2. 深入理解JVM虚拟机9:JVM监控工具与诊断实践

    转自https://juejin.im/post/59e6c1f26fb9a0451c397a8c jvm优化必知系列——监控工具 微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站. ...

  3. git补充(关于pull request)转自知乎

    当你想更正别人仓库里的错误时,要走一个流程: 1先 fork 别人的仓库,相当于拷贝一份,不会有人直接让你修改原仓库的 2.clone 到本地分支,做一些 bug fix 3.发起 pull requ ...

  4. Qt之模型/视图(自定义风格)

    Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风 ...

  5. GDPR全文翻译(一)

    General Data Protection Regulation <一般数据保护法案>全文翻译(一) 编者按 2016年4月14日,欧洲议会投票通过了商讨四年的<一般数据保护法案 ...

  6. gis空间分析案例_坐标文件高斯投影变换地理处理工具

    gis空间分析案例_坐标文件投影变换地理处理工具 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 功能: 对文件进行投影变换 特点: 1. 地理处理工具,可以与 ...

  7. SQL SERVER SELECT语句中加锁选项的详细说明

    共享锁(读锁)和排他锁(写锁)   共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句. 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能 ...

  8. 005-多线程-集合-Map-ConcurrentSkipListMap

    一.概述 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景. ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表.但是,第一,它 ...

  9. 好用的开源SVN仓库

    1.地址 https://svnbucket.com/#/projects 2.简单注册使用即可

  10. Django之model.form创建select标签

    前言 之前我们学习了form表单验证用户输入格式和自动创建HTML,那么如果用户创建select标签时怎么办呢,先来看下这个东西: models.py 数据格式: class UserInfo(mod ...