0%

原型模式即对对象进行拷贝,快速在Java内存堆中创建一个新的对象,按照对象的引用类型是否一起拷贝复制分为深拷贝和浅拷贝,深拷贝会把对象的引用类型也在内存中创建出一个新的对象,而浅拷贝不会创建新的引用类型对象,因此浅拷贝出的新对象的引用对象指向还是原先的同一引用对象;

阅读全文 »

适配器模式主要解决当客户端需要使用一个已有的目标类时,该目标类的功能可以满足客户端的需要,但是该目标类所提供的接口无法让客户端直接使用,因此需要对目标类进行转换适配,使得无需改变其结构方法即可被客户端直接使用;如何实现不改变目标类的方法,而同时又能满足现有客户端的要求呢;解决办法就是引入一个适配器类,让适配器类提供客户端需要的接口,同时适配器内部依赖目标类,客户端只需要耦合适配器类,这样当客户端调用适配器方法时,实际上是去委托给目标类进行处理,而在此过程中,客户端与目标类没有发生耦合;适配器模式主要有依赖和继承两种方式,而又继承之间的需要强烈的”is a”的关系,因此实际使用中以依赖委托的方式居多;下面看一个案例:
系统中包含AdvancedUser和Admin两个不同权限的用户类,AdvancedUser具有一个login登录的方法, Admin具有一个更高优先级的删除用户deleteUser的方法:

1
2
3
4
5
6
7
8
9
10
11
public class AdvancedUser {
public void login() {
System.out.println("login system");
}
}

public class Admin {
public void deleteUser(){
System.out.println("delete user a");
}
}
阅读全文 »

建造者模式是把一个复杂对象的创建过程给结构化,当创建一个对象需要的参数大于5个,并且参数还可选的时候,如果使用构造器来区分,会使类的构造函数很多,使用起来非常混乱,并且对于部分必选参数,没办法进行合理控制,因此我们可以把一个复杂度对象的创建给结构化,分门别类的构建不同的部分,传统建造者模式的类图如下所示:

阅读全文 »

一条包含字母A-Z的消息通过以下方式进行了编码:’A’ -> 1,’B’ -> 2,…,’Z’ -> 26; 给定一个只包含数字的非空字符串,请计算解码方法的总数。题目数据保证答案肯定是一个32位的整数。

阅读全文 »

给定一个可能包含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。

阅读全文 »

一、单例模式:

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

阅读全文 »

一、工厂模式

一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

  • 主要解决:主要解决接口选择的问题。
  • 何时使用:我们明确地计划不同条件下创建不同实例时。
    阅读全文 »

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以0开头。

阅读全文 »

给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。

阅读全文 »