ProxyPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则
参考书籍:设计模式-可复用面向对象软件基础(黑皮书)
代理模式,在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,其特征是代理类与委托类有同样的接口
简单的典型实例:上网行为中的代理模式
ProxyPattern,UML抽象图百度找,代码实现如下
使用代理模式设计上网行为
代理与实体公共接口
package ProxyPattern;
public interface NetWork {
public abstract void browser();
}
实体类
package ProxyPattern.RealSubject;
import ProxyPattern.NetWork;
public class Real implements NetWork {
public void browser() {
System.out.println("上网浏览信息");
}
}
代理类
package ProxyPattern.Proxy;
import ProxyPattern.NetWork;
public class Proxy implements NetWork{
private NetWork netWork;
public Proxy(NetWork netWork){
this.netWork = netWork;
}
public void browser() {
checkName();
this.netWork.browser();
}
private void checkName(){
//业务逻辑
}
}
测试类
package ProxyPattern;
import ProxyPattern.Proxy.Proxy;
import ProxyPattern.RealSubject.Real;
public class Test {
public static void main(String[] args) {
new Proxy(new Real()).browser();
}
}
待续
关于日志代理
代理与被代理接口
package ProxyPattern;
interface AbstractLog {
public void method();
}
被代理类
package ProxyPattern;
import java.text.SimpleDateFormat;
import java.util.Random;
public class LogRecord implements AbstractLog{
@Override
public void method() {
try{
java.util.Date date = new java.util.Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = format.format(date);
System.out.println("方法method被调用,调用时间为:" + time);
//除零失败异常测试
Random random = new Random();
int a = random.nextInt(10);
int b = random.nextInt(2);
int c = a/b;
System.out.println("方法method调用成功");
System.out.println("除零失败测试数据为:" + c);
}catch(Exception e){
System.out.println("方法method调用失败");
}
}
}
代理类
package ProxyPattern;
public class LogProxy implements AbstractLog {
/*
* 远程代理可以隐藏一个对象存在于不同地址空间的事实
* 虚代理可以进行最优化,例如根据要求创建对象
* 保护代理和智能指针都允许访问一个对象时有一些附加的内务处理
* */
private LogRecord lp;
public LogProxy(){
lp = new LogRecord();
}
@Override
public void method() {
//代理方法实现
//使用代理模式的动机:用户希望程序和某个对象打交道,程序不希望用户直接访问该对象
lp.method();
}
}
测试类
package ProxyPattern;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
AbstractLog al = new LogProxy();
al.method();
}
}
待续
ProxyPattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- Log4j配置概述
一.Log4j 简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合 ...
- Mybatis内部原理与插件原理
Mybatis的运行分为两大问题,第一部分是读取配置文件保存在Configuration对象中,用以创建SqlSessionFactory,第二部分是SqlSession的执行过程.相对而言SqlSe ...
- GSON使用笔记
GSON简介 GSON是Google开发的Java API,用于转换Java对象和Json对象,我在这里将记录一下GSON的简单使用 下载GSON 我们可以在其github仓库中下载,也可以使用Mav ...
- java中构造方法和方法super/this超类与子类中初始化顺序
java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...
- 【转】BMR(Block Media Recovery)
关于RMAN的块恢复.Block是oracle数据库最小恢复单位.鉴于此,BMR可以大大缩短恢复的时间,另外,在进行BMR时不需要停掉数据库,可以直接在数据库open状态对数据文件进行恢复,只是需要恢 ...
- 04——wepy框架搭建
wepy官方文档:https://tencent.github.io/wepy/document.html#/ 1.项目下载 # .安装wepy-cli npm install wepy-cli -g ...
- python mac下使用多进程报错解决办法
使用pychram运行python web,web使用了多进程 mac下运行会提示如下: may have been in progress in another thread when fork() ...
- python 打造一个sql注入脚本 (一)
0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...
- bower的安装和使用
第一 下载node 网址https://nodejs.org/en/ 安装过程基本直接“NEXT”就可以了. 安装完成之后,我们先检测下NodeJS是否安装成功,cmd命令行中键入: node -v ...
- Python 小知识点(7)--类的创建方式
1. 创建类的第1方式(常用) class Foo(object): def func(self): print("Hello Foo") 2.创建类的第2方式 def func( ...