`
roway
  • 浏览: 50418 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第十七:单例模式与代理模式

 
阅读更多
一.

静态的只能访问静态的.单例模式.....每个类只有一个实例

/**
 * 第一种单例模式:类加载的时候就创建
 * */
public class Singleton {
	private static Singleton singleton=new Singleton();
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return singleton;
	}
}

/**
 * 第二种单例模式:使用的时候才创建
 * */
public class Singleton2 {
	private static Singleton2 singleton2;
	
	private Singleton2(){
		
	}
	
	public static Singleton2 getInstance(){
		if(null==singleton2){//第一次使用
			singleton2=new Singleton2();
		}
		return singleton2;
	}
}


二.

非静态的什么都可以访问(即可以访问静态的,也可以访问非静态的)

三.

代理模式:以真实角色作为代理角色的属性

1.声明一个抽象类或者接口(有方法)

/**
 * 定义抽象类。抽象角色:规定了真实角色与代理角色共同是实现的接口
 * */
public abstract class Subject {
	public abstract void request();
}


2.让真正角色继承(实现)上面的接口,并写自己的业务逻辑

/**
 * 真实角色。我们要访问的角色
 * */
public class RealSubject extends Subject {
	public void request() {
		System.out.println("From real subject");
	}

}


3.让代理角色也继承(实现)上面的接口,以真实角色作为代理角色的属性,并写自己的业务逻辑(实现真正角色的业务)

/**
 * 代理角色:是客户端与真实的角色之间的桥梁
 * */
public class ProxySubject extends Subject {
	/**
	 * 以真实角色作为代理角色的属性
	 * */
	private RealSubject realSubject ;
	
	public void request() {
		this.preRequest();
		
		if(null==realSubject){
			realSubject=new RealSubject();
		}
		realSubject.request();//真正要完成的事情
		this.postRequest();
	}

	private void preRequest(){
		System.out.println("pre request");
	}
	
	private void postRequest(){
		System.out.println("post request");
	}
}


4.在客户类利用多态,让接口的引用指向代理角色的实例,并调用代理角色的方法

/**
 * 客户端
 * */
public class Client {
	public static void main(String[] args) {
		Subject subject=new ProxySubject();
		subject.request();
	}
}


分享到:
评论

相关推荐

    Head First 设计模式 JAVA源码

    第十七讲:解释器模式 第十八讲:中介者模式 第十九讲:职责链模式 第二十讲:迭代模式 第二十一讲:模板方法模式 第二十二讲:备忘录模式 第二十三讲:访问者模式 第二十四讲:状态模式 第二十五讲:命令...

    [源代码] 《易学 设计模式》 随书源代码

    第17章 风吹草动:观察者模式 (Observer) 第18章 变化多端:状态模式 (State) 第19章 明修栈道,暗度陈仓:策略模式 (Strategy) 第20章 循序渐进:职责链模式 (ChainofResponsibility) 第21章 独具匠心:命令模式 ...

    设计模式PPT.rar

    12第十二讲代理模式 13第十三讲外观模式 14第十四讲组合模式 15第十五讲桥接模式 16第十六讲适配器模式 17第十七讲解释器模式 18第十八讲中介者模式 19第十九讲职责链模式 20第二十讲迭代模式 21第二十一讲模板方法...

    设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板.pptx

    5. 代理模式:代理模式也是一种结构型模式,它为其他对象提供一种代理以控制对该对象的访问。代理模式与装饰器模式相似,但主要区别在于代理模式更关注于控制访问,而装饰器模式关注于扩展功能。 6. 外观模式:外观...

    Design Pattern FrameworkTM

    - **第 5 章:单例模式**(页码:8) - 讨论了单例模式的核心思想及其在多线程环境下的实现。 - 提供了在 .NET 中实现线程安全单例的具体代码示例。 - **第 6 章:命令模式**(页码:9) - 解释了命令模式的工作...

    guide_to_php_design_pattern_zh.pdf

    - 第十七章:观察者模式 - 第十八章:命令模式 - **翻译团队**:本书的中文版由PHPChina成员翻译完成,各章节分别由不同的译者负责。 #### 五、设计模式案例分析 - **单例模式**:确保类只有一个实例,并提供一个...

    第四章:Spring AOP API 设计模式1

    5. **单例模式(Singleton)**:Spring AOP中的`SingletonTargetSource`保证了每个目标对象只被创建一次,实现了单例模式,确保在整个应用程序中只有一个共享的实例存在,提高了资源利用效率。 6. **适配器模式...

    Head First Design Patterns(All in one).pdf

    13. **第十三章:现实世界中的模式:更好的生活模式** - 探讨了设计模式如何应用于现实生活中的问题。 - 分享了一些实用的设计模式案例研究。 14. **附录:剩余的模式** - 简要介绍了其他一些重要的设计模式。...

    java设计模式

    第17章 装饰模式 17.1 罪恶的成绩单 17.2 装饰模式的定义 17.3 装饰模式应用 17.3.1 装饰模式的优点 17.3.2 装饰模式的缺点 17.3.3 装饰模式的应用 17.4 最佳实践 第18章 策略模式 18.1 刘备江东娶妻,赵云他容易吗 ...

    DesignPattern

    #DesignPattern 《研磨设计模式》书中的例子 --第二章:简单工厂 本质:选择实现 --第三章:外观模式(Facade) ...--第十一章:代理模式(Proxy) 本质:控制对象访问 --第十二章:观察者模式(Observer) 本质:触发联动

    软件架构模式的种类 三种模式

    1. **Double-Check Locking(双重检查锁定)模式**:在多线程环境中用于安全地实现懒汉式单例模式。通过在获取锁之前进行一次检查,在释放锁之后再进行一次检查,以确保只有第一次才创建实例。 2. **其他编码模式**...

    研磨设计模式(完整带书签).part2.pdf

    第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式...

    Delphi模式编程第一分卷

    第17章 命令模式(Command) 17.1 模式解说 17.2 结构和用法 17.2.1 模式结构 17.2.2 代码模板 17.2.3 问题讨论 17.3 范例与实践 17.3.1 Delphi的Action编程机制与命令模式 17.3.2 一个兼有撤销重做功能的...

    Delphi模式编程第二分卷

    第17章 命令模式(Command) 17.1 模式解说 17.2 结构和用法 17.2.1 模式结构 17.2.2 代码模板 17.2.3 问题讨论 17.3 范例与实践 17.3.1 Delphi的Action编程机制与命令模式 17.3.2 一个兼有撤销重做...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163 第20章 操作型模式介绍 176 第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第...

    C#设计模式PDF 电子书

    一、单例模式(Singleton) 单例模式确保一个类只有一个实例,并提供一个全局访问点。在C#中,可以通过静态成员或者 Lazy<T> 类来实现单例,以保证线程安全并延迟初始化。 二、工厂模式(Factory) 工厂模式是一种...

    腊月一十八,聊聊 MyBatis 中的设计模式.docx

    代理模式是 MyBatis 中使用的第四个设计模式。例如 MapperProxy、ConnectionLogger 就是代理模式的应用。代理模式的定义是“为其他对象提供一种代理以控制对这个对象的访问”。 5. 组合模式 组合模式是 MyBatis 中...

Global site tag (gtag.js) - Google Analytics