Skip to content

Commit 18f5570

Browse files
王俊杰王俊杰
authored andcommitted
info
1 parent 66788b3 commit 18f5570

File tree

3 files changed

+96
-31
lines changed

3 files changed

+96
-31
lines changed
Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,6 @@
11
package com.wang.code;
22

3-
import java.io.ObjectInputStream;
4-
import java.lang.reflect.InvocationTargetException;
5-
import java.lang.reflect.Method;
6-
import java.util.*;
7-
import java.util.concurrent.ThreadLocalRandom;
8-
9-
103
public class Test {
114

12-
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
13-
Class clz = ThreadLocalRandom.class;
14-
Method nextSecondarySeed = clz.getDeclaredMethod("nextSecondarySeed");
15-
nextSecondarySeed.setAccessible(true);
16-
17-
int i = 1;
18-
int j = 1;
19-
20-
for (int k=0; k<1000; k++){
21-
if (((int)nextSecondarySeed.invoke(clz) & 0x80000001) == 0){
22-
i++;
23-
} else {
24-
j++;
25-
}
26-
// System.out.println((int)nextSecondarySeed.invoke(clz) & 0x80000001);
27-
}
28-
29-
System.out.println(i);
30-
System.out.println(j);
31-
32-
33-
}
34-
35-
}
5+
public static void main(String[] args) {}
6+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.wang.code.designPatterns;
2+
3+
4+
/*
5+
6+
设计模式:即Design Patterns,是指在java软件设计中被反复使用的一种代码设计经验。
7+
使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。
8+
9+
设计模式主要是基于OOP编程提炼的,它基于以下几个原则:
10+
开闭原则---------对拓展开放,对修改关闭
11+
里氏代换原则------返回实现接口的任意子类都可以满足该方法的要求,且不影响调用方
12+
依赖倒转原则------针对接口编程,依赖于抽象而不依赖于具体
13+
接口隔离原则------使用多个隔离的接口,比使用单个接口要好
14+
迪米特法则--------一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
15+
合成复用原则------尽量使用合成/聚合的方式,而不是使用继承。
16+
17+
uml类图的六种类与类之间的关系
18+
见本package下的 umlImage.png
19+
20+
在java中,设计模式共有23种
21+
22+
可以被归纳为三个大类:
23+
24+
25+
工厂模式(Factory、Abstract Factory)、单例模式(Singleton)、构建器模式(Builder)、原型模式(ProtoType)。
26+
桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式(Decorator)、代理模式(Proxy)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)等。
27+
策略模式(Strategy)、解释器模式(Interpreter)、命令模式(Command)、观察者模式(Observer)、迭代器模式(Iterator)、模板方法模式(Template Method)、访问者模式(Visitor)。
28+
29+
一、创建型模式:创建型模式关注点是如何创建对象,其核心思想是要把对象的创建和使用相分离,这样使得两者能相对独立地变换。
30+
31+
1、工厂方法: 工厂方法是指定义工厂接口和产品接口,但如何创建实际工厂和实际产品被推迟到子类实现,从而使调用方只和抽象工厂与抽象产品打交道。
32+
2、抽象工厂: 定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交道。
33+
3、生成器: Builder模式是为了创建一个复杂的对象,需要多个步骤完成创建,或者需要多个零件组装的场景,且创建过程中可以灵活调用不同的步骤或组件。
34+
4、原型: clone、copy...原型模式是根据一个现有对象实例复制出一个新的实例,复制出的类型和属性与原实例相同。
35+
5、单例: Singleton模式是为了保证一个程序的运行期间,某个类有且只有一个全局唯一实例;
36+
实现方式:
37+
a. 懒汉式 最基础的getInstance, 使用时创建,延迟加载,
38+
if (instance == null){
39+
instance = new Lanhan();
40+
return instance;
41+
}
42+
b. 恶汉式 类加载时创建静态变量
43+
public static final Singleton instance = new Singleton();
44+
c. DCL双检锁 synchronized + volatile
45+
private volatile static Instance ins = null;
46+
public static Instance getInstance(){
47+
if (ins == null){
48+
synchronized (Instance.class){
49+
if (ins == null){
50+
ins = new Instance();
51+
}
52+
}
53+
}
54+
return ins;
55+
}
56+
d. 静态内部类 静态内部,这种方式比较好,同样是延迟加载
57+
public class Singleton{
58+
private static class SingletonHolder {
59+
private static final Singleton Instance = new Singleton();
60+
}
61+
62+
private Singleton();
63+
64+
public static final Singleton getInstance{
65+
return SingletonHolder.Instance;
66+
}
67+
}
68+
e. 枚举 java保证枚举类的实例的唯一性
69+
70+
二、结构型模式:主要涉及如何组合各种对象以便获得更好、更灵活的结构
71+
72+
6、适配器: Adapter模式可以将一个A接口转换为B接口,使得新的对象符合B接口规范。
73+
7、桥接: 桥接模式通过分离一个抽象接口和它的实现部分,使得设计可以按两个维度独立扩展. 使用组合的方式而不是子类,防止子类爆炸💥
74+
8、组合: Composite模式使得叶子对象和容器对象具有一致性,从而形成统一的树形结构,并用一致的方式去处理它们。
75+
9、装饰器: 可以在运行期动态地给核心功能增加任意个附加功能。
76+
10、外观(门面): Facade模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节。
77+
11、享元: 享元模式的设计思想是尽量复用已创建的对象,常用于工厂方法内部的优化。
78+
12、代理: 代理模式通过封装一个已有接口,并向调用方返回相同的接口类型,能让调用方在不改变任何代码的前提下增强某些功能(例如,鉴权、延迟加载、连接池复用等)。
79+
80+
三、行为型模式: 行为型模式主要涉及算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。
81+
82+
13、责任链: 责任链模式是一种把多个处理器组合在一起,依次处理请求的模式
83+
14、命令: 命令模式的设计思想是把命令的创建和执行分离,使得调用者无需关心具体的执行过程,通过封装Command对象,命令模式可以保存已执行的命令,从而支持撤销、重做等操作。
84+
15、解释器: 解释器模式通过抽象语法树实现对用户输入的解释执行, 解释器模式的实现通常非常复杂,且一般只能解决一类特定问题。
85+
16、迭代器: Iterator模式常用于遍历集合,它允许集合提供一个统一的Iterator接口来遍历元素,同时保证调用者对集合内部的数据结构一无所知,从而使得调用者总是以相同的接口遍历各种不同类型的集合。
86+
17、中介: 中介模式是通过引入一个中介对象,把多边关系变成多个双边关系,从而简化系统组件的交互耦合度。
87+
18、备忘录: 备忘录模式是为了保存对象的内部状态,并在将来恢复,大多数软件提供的保存、打开,以及编辑过程中的Undo、Redo都是备忘录模式的应用。
88+
19、观察者: 观察者模式,又称发布-订阅模式,是一种一对多的通知机制,使得双方无需关心对方,只关心通知本身。
89+
20、状态: 状态模式的设计思想是把不同状态的逻辑分离到不同的状态类中,从而使得增加新状态更容易;状态模式的实现关键在于状态转换。简单的状态转换可以直接由调用方指定,复杂的状态转换可以在内部根据条件触发完成。
90+
21、策略: 策略模式是为了允许调用方选择一个算法,从而通过不同策略实现不同的计算结果。通过扩展策略,不必修改主逻辑,即可获得新策略的结果。
91+
22、模版方法: 模板方法是一种高层定义骨架,底层实现细节的设计模式,适用于流程固定,但某些步骤不确定或可替换的情况。
92+
23、访问者: 访问者模式是为了抽象出作用于一组复杂对象的操作,并且后续可以新增操作而不必对现有的对象结构做任何改动。
93+
94+
*/
250 KB
Loading

0 commit comments

Comments
 (0)