设计模式

[UE4]反射

时间秒杀一切 提交于 2021-02-16 22:11:05
1、根据名字获得类(C++支持,蓝图本身不支持但可以通过工厂模式模拟)   国外大神提供的封装好的C++实现: https://github.com/getsetgames/BlueprintReflection 功能: 1) Get Class By Name(根据类的名字获得类) The Get Class By Name blueprint function can be used to retrieve a Class (UClass) object by providing its name. 2) Construct Object From Class(根据类来构建对象) The Construct Object From Class blueprint function can be used to create an instance of any class that derives from Object (UObject). 3)Construct Object From Class Name(根据类的名字来生成对象) The Construct Object From Class Name blueprint function can be used to create an instance of any class that derives from

go 和 rust 设计模式对比

倾然丶 夕夏残阳落幕 提交于 2021-02-16 19:06:45
定义 工厂模式可分为三类: 简单工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 属于创建型模式,不属于 23 种 GOF 设计模式之一,由一个工厂对象决定创建出哪一种产品类实例,逻辑为定义一个工厂类,根据传入的参数不同返回不同的产品实例,被创建的实例具有共同的父类或接口。 工厂方法模式 跟简单工厂模式的区别就是,定义了一些工厂子类,每个工厂子类都可以创建相对应的产品类实例,而不用工厂父类去根据参数创建,一般在产品类比较多的情况下,不想太多复杂的逻辑封装在工厂父类里面,可以用这种模式。 抽象工厂模式 顾名思义,把工厂抽象出来,根据具体的业务需求组合工厂创建产品实例的逻辑,通常为创建多个产品实例类。抽象工厂一旦要增加创建产品实例的逻辑,就需要修改抽象工厂接口的具体产品组合逻辑,所以并不符合开闭原则,如果是需要频繁增加(修改)产品实例的话,要衡量是否采用这种模式 基本结构 工厂模式从源码上总的来说可以分为 4 部分: 抽象产品: 通过声明接口(特性),定义了产品的业务方法。 具体产品: 通过 implement 接口(特性),定义了业务方法的具体逻辑。 抽象工厂: 按照相应的业务逻辑,声明了创建产品对象的业务方法(多数为组合方式)。 具体工厂: 通过 implement 接口(特性),定义了创建产品对象的具体逻辑。 结构设计的关键点: 产品只负责产品对象的创建,其他什么都不关心,

饿汉式和懒汉式(单例模式详解)

泄露秘密 提交于 2021-02-16 10:11:55
单例的目的是保证某个类仅有一个实例。当有某些类创建对象内存开销较大时可以考虑使用该模式。 单例模式又分为 饿汉式 和 懒汉式 。下面分别说明: 1.饿汉式。顾名思义,该模式在类被加载时就会实例化一个对象。具体代码如下: public class Person { // 饿汉式单例 private static Person person = new Person(); private Person(){} public static Person getInstance(){ return person; } } 该模式能简单快速的创建一个单例对象,而且是 线程安全的(只在类加载时才会初始化,以后都不会) 。但它有一个缺点,就是不管你要不要都会直接创建一个对象,会消耗一定的性能(当然很小很小,几乎可以忽略不计,所以这种模式在很多场合十分常用而且十分简单) 2.懒汉式。该模式只在你需要对象时才会生成单例对象(比如调用getInstance方法) public class User { // 懒汉式单例,只有在调用getInstance时才会实例化一个单例对象 public static User user; private User(){ } public static User getInstance(){ if (user== null ){ // step 1. user =

Java程序性能优化- 让你的Java程序更快、更稳定pdf

此生再无相见时 提交于 2021-02-16 08:12:34
下载地址: 网盘下载 Java程序性能优化- 让你的Java程序更快、更稳定 内容介绍:    《java程序性能优化——让你的java程序更快、更稳定》共6章,先后从软件设计、软件编码、jvm调优以及程序故障排除等方面介绍针对java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项;第2章从设计层面介绍与性能相关的设计模式、组件。第3章从代码层面介绍如何编写高性能的java程序;第4章介绍并行开发和如何通过多线程提高系统性能;第5章立足于jvm虚拟机层面,介绍如何通过设置合理的jvm参数提升java程序的性能;第6章为工具篇,介绍获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。 Java程序性能优化- 让你的Java程序更快、更稳定 目录: 第1章 java性能调优概述 1 1.1 性能概述 1 1.1.1 看懂程序的性能 1 1.1.2 性能的参考指标 2 1.1.3 木桶原理与性能瓶颈 2 1.1.4 amdahl定律 3 1.2 性能调优的层次 5 1.2.1 设计调优 5 1.2.2 代码调优 5 1.2.3 jvm调优 6 1.2.4 数据库调优 6 1.2.5 操作系统调优 6 1.3 基本调优策略和手段 7 1.3.1 优化的一般步骤 7 1.3.2 系统优化注意事项 8 1.4 小结 8 第2章 设计优化 10 2.1

Java进阶训练营

安稳与你 提交于 2021-02-15 17:11:30
Java进阶训练营 \/ itspcool 一起交流学习 案例分析 学习组合使用多种 JVM 工具,详细了解 JVM 的内部运行状态。 对运行中的 JVM 进行堆内存、线程、CPU、GC 和死锁情况进行分析。 通过动态运行数据,分析热点类和方法,查找性能瓶颈。 核心要点 使用 jstat/jmap/jstack 等命令,JConsole/JVisualVM/JMC 等可视化工具剖析 JVM 性能。 分析 JVM 的堆内存、线程、类加载、CPU 使用情况,诊断 JVM GC 情况,检测死锁。 使用飞行记录器,分析一段时间内的 JVM 运行状态,分析热点方法和性能瓶颈。 一、 JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您 对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了。 二、 设计模式。其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代 码往往要借助一些设计模式

【Java基础】关于枚举类你可能不知道的事

筅森魡賤 提交于 2021-02-15 12:14:20
谈谈枚举 [TOC] 如果一个类的对象个数是有限的而且是不变的,我们通常将这样的类设计成枚举类。 1. 枚举类的定义 枚举类有如下特点: 枚举类默认是使用final关键字修饰的,所以枚举类不能被继承; 枚举类的构造函数默认是使用private修饰的; 定义枚举类时所有实例必须在第一行全部列出; 枚举类也可以实现接口; 枚举类可以包含抽象方法。 //默认final修饰,不能被继承 public enum EnumDemo implements Runnable { //枚举的字段必须加注释 //男性 MALE("male"){ @Override //这边每个枚举类都单独实现了接口方法,也可以统一实现 //在枚举类的定义中实现一个就好了 public void run() { System.out.println("l like run..."); } @Override public void tellSex() { System.out.println("l am a man"); } }, //女性 Female("female"){ @Override public void run() { System.out.println("l hate running..."); } @Override public void tellSex() { System.out

python设计模式之单例模式(一)

自作多情 提交于 2021-02-15 03:38:44
单例设计模式的概念: 单例设计模式即确保类有且只有一个特定类型的对象,并提供全局访问点。一般我们操作数据库的时候为了避免统一资源产生互相冲突,创建单例模式可以维护数据的唯一性。 单例模式的特性: 确保类有且只有一个对象被创建。 为对象提供一个访问点,以使程序可以全局访问对象。 控制共享资源的并行访问。 下面是单例模式的UML图。(注:UML-Unified Model Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语) 传统的单例模式的实现方法是,使构造函数私有化,并创建一个静态方法来完成对象的初始化,对象在第一次调用时创建,以后这个类将返回同一个对象. 单例模式的实现 网上找了一个C#的例子(其中考虑到多线程的问题)可以了解下,下面我们主要介绍Python的单例模式的使用。 /// <summary> /// 单例模式的实现 /// </summary> public class Singleton { // 定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; // 定义一个标识确保线程同步 private static readonly object locker = new object (); // 定义私有构造函数,使外界不能创建该类实例 private

基础命令

天涯浪子 提交于 2021-02-15 02:30:21
访问练习用虚拟机 1.1 问题 学会在教学环境中访问练习用虚拟机,主要完成以下事项: 快速重置教学虚拟机环境 通过“虚拟系统管理器”访问虚拟机 通过 ssh -X 远程访问 server 的命令行 1.2 方案 为了方便学员练习所学实验案例,教学环境的CentOS真机已经部署为基于KVM技术的虚拟化服务器,并且预先提供了3个虚拟机:server、desktop、classroom。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:快速重置教学虚拟机环境 按照顺序先重置classroom,再依次重置server、desktop;如果只是做Linux管理员技术部分的练习,只需要重置classroom、server就可以。 [root@room9pc13 ~]# rht -vmctl reset classroom //先重置资源服务器 [root@room9pc13 ~]# rht -vmctl reset server //再重置练习用虚拟机 [root@room9pc13 ~]# rht -vmctl reset desktop 步骤二:通过“虚拟系统管理器”访问虚拟机 这种方式的优势是,即使虚拟机的IP地址或防火墙配置有误,仍然可以访问;不足的地方是,比较占用系统资源、不方便传递文本信息(复制粘贴)。 直接从桌面双击“虚拟系统管理器”图标,找到classroom

Spring 学习笔记8---Spring AOP

那年仲夏 提交于 2021-02-15 00:00:48
前言 容器和AOP是Spring的两大核心。本文将来学习Spring AOP。 AOP是什么? AOP在计算机科学领域还是相对年轻的概念,由Xerox PARC公司发明。Gregor Kiczales 在1997年领导一队研究人员首次介绍了AOP。当时他们关心的问题是如何在大型面向对象的代码库中重复使用那些必要且代价高的样板,那些样板的通用例子具有日志,缓存和事务功能。在最终的研究报告中,Kiczales和他的团队描述了OOP技术不能捕获和解决的问题,他们发现 横切关注点 最终分散在整个代码中,这种交错的代码会变得越来越难开发和维护。他们分析了所有技术原因,包括为何这种纠缠模式会出现,为什么避免起来这么困难,甚至涉及了设计模式的正确使用。该报告描述了一种解决方案作为OOP的补充,即使用“切面aspects”封装横切关注点以及允许重复使用。最终实现了 AspectJ ,就是今天Java开发者仍然使用的一流AOP工具。 也就是说,AOP可不是Spring发明的,Spring只是对AOP做了支持而已。既然如此,AOP里面的几个概念就是通用的了。 《Spring in Action》这本书给出了明确的解释: 在软件开发中,散布于应用中多处的功能被称为横切关注点(cross-cutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的。比如:日志、声明式事物

模板方法模式 Template method 行为型 设计模式(二十六)

牧云@^-^@ 提交于 2021-02-14 23:52:02
模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份 简历模板 ,使用此模板的格式,然后替换为你的内容。 我们从小就有语文课,逢考必有作文,而学习的途径之一就是参考优秀的 范文 ,学习了解他们的结构,风格等。 以上就是现实世界中的模板,模板的概念随处可见,所有的工业制品哪个不是 模具 生产的? 在程序设计中,也有模板的概念 在软件开发过程中,可能经常会用到类似的处理逻辑,但是可能又有一些细节的差异 比如做菜,不管做什么菜,基本上都离不开买菜,洗菜,切菜,做菜几个主要步骤 这几个步骤中,只有做菜的差别最大,不同的菜不同的做法,而买菜洗菜切菜的过程,却基本类似 我们常常希望能够 定义一个通用的处理框架 ,然后将一部分实现细节交由子类进行处理 也就是 面向框架进行编程 ,而不是每次都复制粘贴修改代码,具体的细节依靠子类确定,这就是模板的初衷。 比如定义一个做菜的抽象类,实现了买菜,洗菜,切菜,做菜方法定义为抽象方法留待子类实现 那么,回锅肉和大头菜就可以通过继承扩展做菜类,只需要实现做菜的环节即可。 意图 定义一个操作中的算法的骨架,而将一些步骤延时到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤。 结构