设计模式-简单工厂模式(SimpleFactory)
简单工厂模式又叫静态工厂模式,,通过定义一个类(FruitFactory)来负责创建其他类的实例,被创建的实例通常都具有相同的父类(Fruit)。
角色和职责:
1.工厂角色(Factory)-FruitFactory:
简单工厂模式的核心。它负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象产品(Product)-Fruit:
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(concrete product)-Banana、Apple:
简单工厂模式所创建的具体实例对象
UML图:
具体代码:
/**
* 水果接口类
*/
public interface Fruit {
public void pick();
}
/**
* 苹果实现类
*/
public class Apple implements Fruit{ @Override
public void pick() {
System.out.println("采摘苹果");
}
}
/**
* 香蕉实现类
*/
public class Banana implements Fruit{
@Override
public void pick() {
System.out.println("采摘香蕉");
}
}
/**
* 水果生产类
*/
public class FruitFactory { public static Fruit getFruit(String fruitName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//原简单工厂模式写法
// if(fruitName.equalsIgnoreCase("apple")){
// return new Apple();
// }else if(fruitName.equalsIgnoreCase("banana")){
// return new Banana();
// }
// return null;
//简单工厂模式优化后的代码如下:
Class cls = Class.forName(fruitName);
return (Fruit) cls.newInstance();
}
}
public class Main {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Fruit apple = FruitFactory.getFruit("Apple");//生产苹果
Fruit banana = FruitFactory.getFruit("Banana");//生产香蕉
apple.pick();
banana.pick();
}
}
结果:
采摘苹果
采摘香蕉
优缺点:
优:在这个模式下,工厂类(FruitFactory)是整个模式的核心,根据外界给定的信息,决定用哪个具体类对象。
缺:高内聚,扩展性差,多一个水果时,需要去创建。
项目源码:https://github.com/qjm201000/design_pattern_simpleFactory.git
设计模式-简单工厂模式(SimpleFactory)的更多相关文章
- 设计模式——简单工厂模式(SimpleFactory Pattern)
最近做项目总是遇到这样或者那样的问题,代码不够简洁,代码可扩展性不够好,耦合度又太高了,导致经常有种想去重构又无从下手的感觉. 无意间翻出了之前买的一本书<大话设计模式>读了一遍,受益匪浅 ...
- 简单工厂模式 SimpleFactory
简单工厂模式 SimpleFactory 1.1什么是简单工厂设计模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模 ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- IOS设计模式浅析之简单工厂模式(SimpleFactory)
概述 首先说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工厂方法模式,是工厂方法模式的特殊实现.这里对简单工厂模式进行介绍,是为本系列后面的工厂方法和抽象工厂模式做一个引子. 定义 ...
- Java设计模式 -- 简单工厂模式(SimpleFactory)
一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...
- C++设计模式——简单工厂模式
简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ...
- 深入浅出设计模式——简单工厂模式(Simple Factory)
介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
- C#设计模式--简单工厂模式
简单工厂模式是属于创建型模式,但不属于23种GOF设计模式之一. 举一个例子:一个公司有不同的部门,客户根据需要打电话到不同的部门.客户相当于上端,不同部门相当于下端.不使用简单工厂模式来实现的例子如 ...
随机推荐
- Linux 下编译并安装配置 Qt 4.53全过程
最近准备做 Nokia 的 Symbian,Maemo 下触摸屏开发.考虑到程序的跨平台可移植性,最终选择使用 Qt 开发.相对来说,国内关于 Qt 相关文档并不算很多.作者将 Linux 下编译并安 ...
- 阿里将成为下一个谷歌?是谁Google真正的挑战者
非常多观点觉得阿里下一步即将成为google的挑战者,但不管从技术储备还是产业布局来看,阿里都难当此任.在产业模式上.电商挑战搜索尚有诸多短板,在解决这些根本问题前,空泛谈论这些是没有意义的. < ...
- 协程在Web服务器中的应用(配的图还不错)
协程(纤程,微线程)这个概念早就有之,各家互联网公司也都有研究,但在国内各大论坛和大会热起来,还是今年的事. 最近参与讨论开放平台建设和架构设计过程中,有同事提到了使用协程代替线程,能够很大幅度的提高 ...
- Delphi7下安装TMS component控件
1.启动delphi7.2.File-->Open Project ...打开TMS component 源目录下的“tmsd7.bpg”. 3.在打开的窗口列表中,依次在各选项上点击鼠标右键, ...
- comtextMenu 如何正确的响应MouseLeave事件
今天给菜单加上这个事件,发现弹出菜单后 鼠标怎么动都不会触发 mouseLeave事件 解决方法是 在菜单loaded事件中,利用visualTreeHelper 访问他内部的border控件,把这个 ...
- Fabric-Crashlytics-Android 注意点
Fabric-Crashlytics-Android 注意点 非发布版本关闭Fabirc 官方文档中有这方面的介绍,有助于在开发过程中,提高编译速度和避免上报不必要的Crash 链接 一共两步 第一步 ...
- 微信小程序把玩(四)应用生命周期
原文:微信小程序把玩(四)应用生命周期 App() 函数用来注册一个小程序,注意必须在 app.js 中注册,且不能注册多个. 使用方式也跟Android中的Application中初始化一些全局信息 ...
- JS解析Json 数据并跳转到一个新页面,取消A 标签跳转
JS解析Json 数据并跳转到一个新页面,代码如下 $.getJSON("http://api.cn.abb.com/common/api/staff/employee/" + o ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- Virtualbox使用点滴(共享USB设备,Linux下我的用户没有加到vboxuser中去)
由于网银客户端的问题,只能够在windows环境下支付,所以一直保存着一个激活的virtualbox下的windows,用来完成在线支付. 过去这个激活的windows是安装在ubuntu 10.10 ...