工厂类

设计模式@第14章:享元模式

扶醉桌前 提交于 2020-01-10 22:52:21
第14章:享元模式 一、展示网站项目需求 小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同: 有客户要求以新闻的形式发布 有客户人要求以博客的形式发布 有客户希望以微信公众号的形式发布 二、传统方案解决网站展现项目 直接复制粘贴一份,然后根据客户不同要求,进行定制修改 给每个网站租用一个空间 方案设计示意图 14.3 传统方案解决网站展现项目-问题分析 需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费 解决思路:整合到一个网站中,共享其相关的代码和数据,对于硬盘、内存、CPU、数据库空间等服务器资源都可以达成共享,减少服务器资源 对于代码来说,由于是一份实例,维护和扩展都更加容易 上面的解决思路就可以使用 享元模式 来解决 14.4 享元模式基本介绍 享元模式(Flyweight Pattern) 也叫 蝇量模式: 运用共享技术有效地支持大量细粒度的对象 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象

设计模式:工厂模式

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-08 14:22:24
一、简单工厂模式 简单工厂模式是指由一个工厂对象决定创建哪一种产品类的实例,但是不属于GoF的23种设计模式。简单工厂模式适用于工厂类负责创建的对象较少的场景,客户端只需要传入工厂类的参数,而对如何创建对象并不关心。 1、产品类的接口及实现类 接口: public interface ICourse { void study(); } 实现类: public class JavaCourse implements ICourse { @Override public void study() { System.out.println("study java"); } } 2、工厂类 工厂类根据传入的ICourse接口的子类的类型来构造实例: public class CourseFactory { public ICourse create(Class<? extends ICourse> type) { if (type == null) { return null; } try { return type.newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } } 3、应用 public class SimpleFactoryMain { public static void

案例分析:设计模式与代码的结构特性

守給你的承諾、 提交于 2020-01-08 06:16:36
1.什么是创建型模式 创建型模式顾名思义,是一种专注于类的实例化过程的设计模式,它的目标是将创建对象和使用对象的代码分离。外界只需要知道可以通过一组接口来获取对象,而不用关心具体是如何实现的 创建型模式主要以工厂模式为主,这也是本文研究的重心 2.简单工厂模式 想象有一组按钮ButtonA,ButtonB... ...,他们继承自相同的基类Button,实现了规定的接口。简单工厂模式会提供一个类来创建这些按钮的实例,接口调用者只需要提供不同的参数,就可以获得不同的实例 类图如下所示 部分实现代码如下 Factory.cpp #include "Factory.h" #include "ButtonA.h" #include "ButtonB.h" Factory::Factory(){} Factory::~Factory(){} Button* Factory::createButton(string bname) { if(bname=="A") return new ButtonA(); else if(bname=="B") return new ButtonB(); return NULL; } main.cpp int main(int argc, char** argv) { Button* b=Factory::createButton("B"); b-

【设计模式自习室】理解工厂模式的三种形式

折月煮酒 提交于 2020-01-04 00:19:06
前言 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有: 该模式的 介绍 ,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的 代码示例 :熟悉该模式的代码长什么样子 该模式的 优缺点 :模式不是万金油,不可以滥用模式 该模式的 实际使用案例 :了解它在哪些重要的源码中被使用 该系列会逐步更新于我的博客和公众号(博客见文章底部) 也希望各位观众老爷能够关注我的个人公众号: 后端技术漫谈 ,不会错过精彩好看的文章。 系列文章回顾 【设计模式自习室】开篇:为什么我们要用设计模式? 【设计模式自习室】建造者模式 【设计模式自习室】原型模式 【设计模式自习室】透彻理解单例模式 创建型——简单工厂/工厂模式/抽象工厂 引子 工厂模式是一个非常重要的创建型模式,但是工厂模式又分为好多种,并且网上文章很多,很多对工厂模式的定义都不是很明确,甚至还互相冲突,本文希望通过放在一起串讲的形式,力求能够用最简洁的语言 理清 工厂模式。 先看一个工厂模式的定义: “Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to

spring启动(3)--AbstractRefreshableApplicationContext

拟墨画扇 提交于 2019-12-30 11:53:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在spring容器中,BeanDefinition是最为重要的元素。那么从我们配置的xml到最终成为被容器管理的bean最起码要经过以下几个过程 第一、资源定位。spring能够定位到我们配置的文件。通常,我们把配置信息放置到xml文件中去,spring要根据自己的规则找到配置文件。 第一、文件解析,将我们配置到xml或者其他文件中的类元素转化成为可以被spring容器认识的元素-beanDefinition 第二、beanDefinition的载入。有了beanDefinition还要将其转化成Spring内幕标示的数据结构。这个结构IOC容器通过HashMap去维护。 FileSystemXmlApplicationContext是bean载入的成熟上下文。他的整个过程包括了bean从配置文件元素,到能够被spring容器管理的所有过程。 FileSystemXmlApplicationContext public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent);

Spring Boot 嵌入式Web容器

ぐ巨炮叔叔 提交于 2019-12-28 17:10:47
目录 前言 1、起源 2、容器启动流程解析 2.1、获取应用类型 2.2、容器启动流程 3、加载 Web 容器工厂 4、总结 前言 最近在学习Spring Boot相关的课程,过程中以笔记的形式记录下来,方便以后回忆,同时也在这里和大家探讨探讨,文章中有漏的或者有补充的、错误的都希望大家能够及时提出来,本人在此先谢谢了! 开始之前呢,希望大家带着几个问题去学习: 1、Spring Boot 嵌入式Web容器是什么? 2、整体流程或结构是怎样的? 3、核心部分是什么? 4、怎么实现的? 这是对自我的提问,我认为带着问题去学习,是一种更好的学习方式,有利于加深理解。好了,接下来进入主题。 1、起源 在当今的互联网场景中,与终端用户交互的应用大多数是 Web 应用,其中 Java Web 应用尤为突出,其对应的 Java Web 容器发展至今也分为 Servlet Web 容器和 Reactive Web 容器,前者的使用率大概占比是百分之九十左右,其具体的实现有 Tomcat 、 Jetty 和 Undertow ;而后者出现较晚,且技术栈体系并未完全成熟,还有待时间验证可行性,它的默认实现为 Netty Web Server 。其中的 Servlet 规范与三种 Servlet 容器的版本关系如下: Servlet 规范 Tomcat Jetty Undertow 4.0 9.X 9

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

我只是一个虾纸丫 提交于 2019-12-27 03:18:37
1. 工厂模式介绍 1.1 定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 1.2 图片描述 Factory:工厂类,工厂模式的核心,负责实现创建具体产品类的业务逻辑,可以被外界直接调用,根据需要创建所需的具体产品实例对象。 Product:抽象产品类,所有具体对象的父类,提供所有子类实例公共的接口。 ConcreateProductA,ConcreateProductB:具体产品类,实现不同的接口,拥有共同继承父类的公共接口实现不同的业务需求。 2. 具体实现 2.1 创建抽象产品类 定义一个抽象的做饭类,有一个抽象方法make()用来做饭: public abstract class CookFood { /** * 做饭抽象类 */ public abstract void make ( ) ; } 2.2 创建产品类 定义三个具体的产品类,分别是做早饭,做午饭,做晚饭。并且都实现了父类的make()方法: public class CookBreakfast extends CookFood { @Override public void make ( ) { System . out . print (

设计模式——工厂模式(简单工厂)

烂漫一生 提交于 2019-12-23 13:11:14
一、什么是工厂模式:   在人类社会发展中,起初人们生活所需品都是自供自给,饭菜,衣服,家具都是由自己制作,这样感觉人们要和很多行业有接触,很麻烦。后来逐渐出现了各种”工厂“,由他们代替你去生产所需品,你要什么式样的东西只要告诉它们,它们就会给你生产好,这样你可以抽出大量精力去做其他重要的事了。   在程序世界中也一样,以前每当我们需要什么实例对象,都是自己new出来的,这样的坏处是会和很多类有牵连,耦合度高(要new一只狗,就要引入Dog类,要new一只猫,就要引入Cat类),那我们完全可以像真实世界中一样,把这项工作交给”工厂“去办,我们要创建什么类型的实例,只要给工厂传入某种参数告知他们就行了,工厂会替你创建实例对象。这便是工厂模式思想。工厂模式分三种: 简单工厂模式,工厂方法模式,抽象工厂模式 。本篇讲解简单工厂模式。 二、简单工厂模式:       简单工厂模式是工厂模式中最简单简陋的形式。它的工厂类就是一个实实在在的具体工厂类,里面有逻辑判断,它会判断你传入的不同参数而创建不同的实例。按理说这样没问题,但这样是不完美的 , 请看例子: //抽象产品类:定义一类产品,接口或抽象类 public interface Animal { public void run(); //接口只声明方法,不实现 } //具体产品类1:Dog类实现Animal接口 public class

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

巧了我就是萌 提交于 2019-12-23 02:12:37
简单工厂模式 (Simple Factory Pattern) 定义: 又叫静态工厂方法模式 (Static FactoryMethod Pattern), 是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 类型:创建型模式 UML图 简单工厂模式中所包含的角色及其相应职责如下: 工厂 (Creator) 角色 : 简单工厂模式的核心,由它负责创建所有类的内部逻辑。当然工厂类必须能被外界调用,创建所需要的产品对象。 抽象产品 (Product) 角色 : 简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。 具体产品 (Concrete Product) 角色 :简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。 使用场景及代码实现 使用 Java 来编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果 public abstract class Operation { protected double numA; protected double numB; public double getNumA() { return numA; } public void setNumA(double numA) { this.numA = numA; } public

创建型模式之简单工厂模式

梦想与她 提交于 2019-12-21 09:04:57
重要程度:4星(5星满分) 1.1. 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。 1.2. 模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 1.3. 模式结构 简单工厂模式包含如下角色: Factory:工厂角色 工厂角色负责实现创建所有实例的内部逻辑 Product:抽象产品角色 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口 ConcreteProduct:具体产品角色 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。 1.4. 时序图 1.5. 代码分析 ////////////////////////////////