设计模式六大原则(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种设计模式之一)的更多相关文章

  1. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  2. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  3. Java开发中的23种设计模式(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. c#中的23种设计模式

    C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...

  5. Java 23种设计模式

    转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...

  6. 从追MM谈Java的23种设计模式(转)

    从追MM谈Java的23种设计模式    这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...

  7. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  8. JAVA:23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. 从追MM谈Java的23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...

  10. 23种设计模式全解析 (java版本)

    转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...

随机推荐

  1. postman请求ajax失败的解决方法

    第一步,把要提交的数据放到Body里 第二步:去掉请求头的Content-Length字段

  2. java代码-----------继承练习

    总结:父类和子类拥有相同的 方法时,父类的方法被覆盖,子类 package com.sads; class fong { void pprint() { this.print(); this.prin ...

  3. 阻塞队列之六:LinkedBlockingDeque

    一.LinkedBlockingDeque简介 java6增加了两种容器类型,Deque和BlockingDeque,它们分别对Queue和BlockingQueue进行了扩展. Deque是一个双端 ...

  4. 将新浪博客里的表情包存入MySQL数据库不完整版本一堆可能用到的散乱代码

    header = {'Cookie': 'SINAGLOBAL=7368591819178.463.1491810091070; ALF=1558832450; SCF=Ajrc1sxuwynVIu_ ...

  5. Debian 7.0.0 安装教程图解

    Debian7.0.0的安装镜像文件有3个DVD,安装基本系统只用到第一个镜像文件,即DVD1,其它镜像文件是附带的软件包,下面是安装方法   一.说明: Debian7.0.0的安装镜像文件有3个D ...

  6. 简单IOCP例子

    使用IOCP模型编程的优点 ① 帮助维持重复使用的内存池.(与重叠I/O技术有关) ② 去除删除线程创建/终结负担. ③ 利于管理,分配线程,控制并发,最小化的线程上下文切换. ④ 优化线程调度,提高 ...

  7. java之IO整理(中)

    一:打印流/*System.out.println()重定向输出*/ /*public static void main(String[] args) { System.out.println(&qu ...

  8. Python 模块 - jieba

    安装 jieba pip3 install jieba jieba 支持三种分词模式: 精确模式:将句子最精确地切开,适合文本分析 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不 ...

  9. html中的一些常用的样式标签

    html中的一些常用的样式标签 <p>这里是文本,<mark>高亮</mark></p> <strong>加粗,加重语气</stron ...

  10. Netty心跳之IdleStateHandler

    Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否存活,或者活跃 今天我们就一起初识一下Netty4的心跳机制 Netty4.0提供了一个类,名为IdleStateHandler,这个类可以 ...