随笔分类 - 浅谈设计模式
摘要:1.单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成...
阅读全文
摘要:今天来聊一聊剩下的常用的设计模式! 1.观察者模式 假如有一个小孩,我需要在他睡醒之后,给他喝奶。我们大概可以这样做,设一个标志位=false,当小孩醒的时候,标志=true; 写一个Dad类,定义一个方法,写一个空循环,直到flag=true,跳出循环,执行下面的操作,喂奶,这样做,我们需要两个线
阅读全文
摘要:策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化. 实质:如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化? 我们抛出一个具体的问题来看这个问题:多种方式比较对象的大小? 按照上面说的,我们要将对象和算法分开,所以我定义一
阅读全文
摘要:这篇文章比较简单,作一个笔记。 模拟Iterator. Iterator接口: ArrayList类: Test: 每一种集合提供一个实现Iterator的内部类,每次调用iterator返回一个内部的实现,用户不必关心具体的实现。用户只要知道hasNext()判断集合中是否还存在元素,next取得
阅读全文
摘要:interator是java容器遍历的一种手段,当然遍历容易你可以使用普通的for(;;)或者for(Object o : new Arraylist<Object>()),都是可以的。 先来看看JDK容器是怎么实现的吧,首先看看ArrayList,它有海纳百川的肚量,似乎找不到他的边,它可以big
阅读全文
摘要:奔主题:模拟SpringBean工厂:先来一个简单的interface:beanFactorypackage cn.asto.spring;public interface BeanFactory { public Object getBean();}一个最简单的Spring配置文件: ...
阅读全文
摘要:前一篇提到了静态工厂(也称为普通工厂),单例模式这一篇来谈谈抽象工厂(面向抽象类编程,故名思意)。我现在有一系列的产品 Car Ak47 Apple Computer...简单起见就取前两个。。程序员就是爱偷懒。。莫怪。小二,先来一个抽象类:Vehicle:package cn.asto.abs;p...
阅读全文
摘要:讲工厂模式之前先来谈谈设计模式中最简单的模式 单例,很简单就是永远只能得到一个实现。Car:package cn.asto.factory;public class Car { private static Car car = new Car(); private Car(){} ...
阅读全文
摘要:过滤器之双向过滤? 在WEB应用中无非就是一个request,response.怎么样定义过滤器进行双向拦截呢?即在request过去的时候进行一系列的拦截,在response回来的时候也进行一系列的拦截。说代码:定义两个的JavaBean :Request,Responsepackage cn.a...
阅读全文
摘要:入正题,需求:假如我想对一些信息进行一定规则的过滤.首先定义一个Main类:package cn.asto.filter;public class Main { String str = " hello 大家好! 敏感词汇!";}我想对javacript标签进行过滤,对敏感词汇进行过滤。定义M...
阅读全文
摘要:观看这篇文章前,请先阅读设计模式之代理模式(1)静态代理会发生类爆炸?那jdk的使用的动态代理到底是怎么做到的呢?我来大概模拟一下jdk的动态代理。这是我的目录结构:(可先跳过代码,到最下面听下我的BB,在对照代码来看!)我先来介绍一下这些兄弟:Tank:package cn.asto.proxy;...
阅读全文
摘要:前一篇文章提到了是静态代理,其实用聚合的方式实现代理,当需求过多的时候,也会发生类爆发。所以上有政策,下有对策嘛!可以把所有的代理放在一个代理类中Proxy类中,Proxy被称为总代理!由总代理实现动态代理!要说的东西有点多,先上个代码把!Proxy.java(总代理)package cn.asto...
阅读全文
摘要:设计模式?牛不牛?B or no B? let us make B? 不扯淡了。入正题。 先假设一个场景,一个Tank类,我里面有一个move方法,我需要去检测调用move所用的时间。 定义一个功能接口:Moveable: 建立一个Tank.java: 在方面内部前后加上一些逻辑,计算时间差。 然后
阅读全文