没有合适的资源?快使用搜索试试~ 我知道了~
Java程序设计模式程序设计.doc
0 下载量 104 浏览量
2023-07-12
12:26:30
上传
评论
收藏 1.02MB DOC 举报
温馨提示
试读
67页
Java程序设计模式程序设计.doc
资源推荐
资源详情
资源评论
Java 设计模式
1.1 创建型模式
AbstractFactory ( 抽象工厂 )
FactoryMethod ( 工厂方法 )
Singleton ( 单态模式 )
Builder ( 建造者模式 )
Prototype ( 原型模式 )
1.2 结构型模式
Adapter ( 适配器模式 )
Bridge ( 桥接模式 )
Composite ( 组合模式 )
Decorator ( 装配模式 )
Facade ( 外观模式 )
Flyweight ( 享元模式 )
Proxy ( 代理模式 )
1.3 行为型模式
Chain of Responsibility ( 责任链模式 )
Command ( 命令模式 )
Interpreter ( 解释器模式 )
Iterator ( 迭代器模式 )
Mediator ( 中介者模式 )
Memento ( 备忘录模式 )
Observer ( 观察者模式 )
State ( 状态模式 )
Strategy ( 策略模式 )
TemplateMethod ( 模板方法 )
Visitor ( 访问者模式 )
Toney Chen 的总结
Singleton 设计模式
Singleton 单类模式是最简单的设计模式,它的主要作用是保证在程序运行生命
周期中,使用了单类模式的类只能有一个实例对象存在。单类模式实现了类似 C
语言中全局变量的功能,单类模式常用于注册/查找的服务。
单类模式有两种实现方式:饱汉模式和饿汉模式,如下:
饱汉单类模式例子代码:
[java] view plaincopy
1. public class Singleton1{
2. //饱汉模式,声明时就创建实例对象
3. public static final Singleton1 instance = new Singleton1();
4. //单类模式的构造方法必须为 private,以避免通过构造方法创建对象实例,
5. //并且必须显示声明构造方法,以防止使用默认构造方法
6. private Singleton1(){}
7. //单类模式必须对外提供获取实例对象的方法
8. public static Singleton1 geInstance(){
9. return instance;
10. }
11. }
饿汉单类模式即延迟初始化单类方式,例子代码:
[java] view plaincopy
1. public class Singleton2{
2. //饿汉模式,声明时不创建实例对象
3. public static Singleton2 instance;
4. //单类模式的构造方法必须为 private,以避免通过构造方法创建对象实例,
5. //并且必须显示声明构造方法,以防止使用默认构造方法
6. private Singleton2(){}
7. //单类模式必须对外提供获取实例对象的方法,延迟初始化的单类模式必须使用
synchronized 同步关键字,否则多线程情况下很容易产生多个实例对象
8. public static synchronized Singleton2 geInstance(){
9. //延迟初始化,只有当第一次使用时才创建对象实例
10. if(instance == null){
11. return new Singleton2();
12. }
13. return instance;
14. }
15. }
一般认为饱汉模式要比饿汉模式更加安全。
上面两种 Singleton 单类设计模式的实现方式都隐藏有如下的问题:
(1).虽然构造方式的访问修饰符为 private,即除了自身以外其他任何类都无法
调用,但是通过反射机制的 setAccessiable(true)方法可以访问私有方法和属
性。因此 Singleton 单类模式必须考虑这种例外情况。
(2).对象序列化之后再反序列化时会生成新的对象,因此当 Singleton 单类模式
类实现序列化接口时,必须显式声明所有的字段为 tranisent。
在 JDK1.5 之后引入了 Enum 枚举,因此在 JDK1.5 之后 Singleton 单类模式又有
了第三种实现方式,也是最好的实现方式,例子如下:
[java] view plaincopy
1. public enum Singleton3{
2. INSTANCE{
3. public void doSomething(){
4. ……
5. }
6. };
7. public Singleton3 getInstance(){
8. return INSTANCE;
9. }
10. public abstract void doSomething();
11. }
Singleton 单类模式中只有一个 INSTANCE 枚举元素,枚举可以保证真个程序生命周期中只有
一个实例对象存在,同时还避免了常规 Singleton 单类模式 private 构造方法被反射调用和序
列化问题。
注意:java 中除了构造方法可以创建对象实例以外,还可以通过克隆方法
(clone()是 Object 中的 protected 方法)来创建对象, 若单类对象直接继承自
Object 对象,则如果没有提供具体 clone 方法实现,则当调用克隆方法创建对
象时,会抛出运行时的异常 CloneNotSupportedException。
若单类类继承了实现克隆方法的类,则在单类类中必须覆盖父类的克隆方法,显
式抛出异常 CloneNotSupportedException。
另外,实现了单类模式的类不能再有派生子类,因为构造方式是私有的,子类无
法调用父类构造方法,因此达到了 Final 的效果。
Proxy 设计模式
Proxy 代理设计模式是一种控制对象访问的设计模式,类似于网络代理,网络代
理机制如下图:
Proxy 代理设计模式机制如下:
客户端程序通过代理程序来访问真正的目标程序,代理程序对外隐藏了目标程序。
普通代理设计模式例子代码如下:
[java] view plaincopy
1. interface ProxyBase{
2. public void f();
3. public void g();
4. public void h();
5. }
6. //代理程序
7. class Proxy implement ProxyBase{
8. private ProxyBase implementation;
9. public Proxy(){
10. //目标程序
11. implementation = new ProxyImplementation();
12. }
13. public void f(){
14. implementation.f();
15. }
16. public void g(){
17. implementation.g();
18. }
19. public void h(){
20. implementation.h();
21. }
22. }
23. //目标程序
24. class ProxyImplementation implements ProxyBase{
25. public void f(){
26. System.out.println(“ProxyImplementation.f()”);
27. }
28. public void g(){
29. System.out.println(“ProxyImplementation.g()”);
30. }
31. public void h(){
32. System.out.println(“ProxyImplementation.h()”);
33. }
34. }
35. //客户端程序调用代理
36. public class ProxyDemo{
37. public static void main(String[] args){
38. //客户端调用代理程序
39. Proxy p = new Proxy();
40. p.f();
41. p.g();
42. p.h();
43. }
44. }
从 JDK1.3 以后,java 引入动态代理机制,java 的动态代理只能针对接口进行动
态代理,即要实现动态代理的类必须实现接口,CGLIB 提供了针对类的动态代理
功能。JDK 动态代理的例子如下:
[java] view plaincopy
1. //代理接口
2. interface Foo{
3. public void f(String s);
4. public void g(int i);
5. public void h(int i, String s);
6. }
7. //接口实现类,即被代理类
8. class FooImpl implements Foo{
9. public void f(String s){
剩余66页未读,继续阅读
资源评论
xinkai1688
- 粉丝: 328
- 资源: 8万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功