随笔分类 - 马士兵设计模式学习笔记
摘要:一、概述二、代码1.Animal.java1 public interface Animal {2 public void bark();3 }2.Dog.java1 public class Dog implements Animal {2 3 @Override4 pub...
阅读全文
摘要:《马士兵设计模式学习》学习了以下模式:1.装饰者模式(例子:水管工,木工)2.策略模式(例子:老师用职称比大小、学生用成绩比大小)3.简单工厂模式(例子:VechileFactory,CarFactory,PlaneFactory),方便产品维度的扩展,但生产系列产品不方便,且易工厂灰泛滥4.抽象工...
阅读全文
摘要:一、概述命令模式二、代码1.Client.java1 public class Client {2 3 public void request(Server server){4 server.addCommand(new TextCommand());5 ...
阅读全文
摘要:一、概述1.桥接模式的应用情况:(1)两个维度扩展(2)排列组合二、代码1.Gift.java1 public class Gift {2 3 protected GiftImpl giftImpl;4 }2.GiftImpl.java1 public class GiftImpl {2 3...
阅读全文
摘要:一、概述1.目标:动态代理的代理逻辑可以任意修改2.思路:(1)要把代理逻辑抽离,站在jvm的角度思考,应独立出InvocationHandler接口,并接收被代理的对象及方法作为参数invoke(Object o, Method m),并本身作为参数传给newProxyInstance(Class...
阅读全文
摘要:一、概述1.目标:把Proxy修改成可以代理任意接口及其任意方法2.思路:(1)代理任意接口:把接口类型作为参数传给Proxy的newProxyInstance(Class interfze)(2)代理任意方法:用interfze.getMethods()取出所有方法,拼接实现方法的字符串二、代码1...
阅读全文
摘要:一、概述1.目标:不自己写代理类,利用Proxy.newProxyInstance()动态生成2.用到的知识点:(1)//编译源码,生成class,注意编译环境要换成jdk才有compiler,单纯的jre没有compiler,会空指针错误 JavaCompiler jc = ToolProvide...
阅读全文
摘要:一、概述1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换2.思路:(1)聚合:代理类聚合了被代理类,且代理类及被代理类都实现了movable接口,则可实现灵活多变,具体看代码(2)继承:继承不够灵活,具体看代码二、代码1.Mov...
阅读全文
摘要:一、目标1.用Filter模拟处理Request、Response2.思路细节技巧:(1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterChain),有FilterChain引用,为利用FilterChain调用下一个Filter做准备(2)F...
阅读全文
摘要:一、目标增加filterchain功能二、代码1.Filter.java1 public interface Filter {2 public String doFilter(String str);3 }2.FilterChain.java 1 import java.util.Array...
阅读全文
摘要:一、目标数据提交前做各种处理二、代码1.MsgProcessor.java 1 public class MsgProcessor { 2 3 private List filters = new ArrayList(); 4 private String msg; 5 ...
阅读全文
摘要:一、概述Java 的Awt是Observer模式,现用Java自己模拟awt中Button的运行机制二、代码1.Test.java 1 import java.text.DateFormat; 2 import java.text.SimpleDateFormat; 3 import java.ut...
阅读全文
摘要:1.AWT简单例子TestFrame.java 1 import java.awt.Button; 2 import java.awt.Frame; 3 import java.awt.event.ActionEvent; 4 import java.awt.event.ActionListener...
阅读全文
摘要:一、概述1.目标:读取properties文件改成单例模式二、代码1.Test.java 1 class WakenUpEvent{ 2 3 private long time; 4 private String location; 5 private C...
阅读全文
摘要:一、概述1.目标:用observer.properties文件存储observer类,当要增加observer时,无需修改代码,修改properties文件即可2.properties文件位置的关系:当properties文件放在src目录下时,由于编译会自动把src里的文件放到bin文件平,因此可...
阅读全文
摘要:一、概述childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码。好的方法是封装监听者类,用addListener()方法动态添加监听者二、代码1.Test.javaclass WakenUpEvent{ private long time; private String...
阅读全文
摘要:把小孩醒来时的具体情况封装成事件类Test.javaclass WakenUpEvent{ private long time; private String location; private Child source; public WakenUpEvent(long time, Strin...
阅读全文
摘要:1.概述由于上一个文章《Java OOD 线程》中的线程是父类主动监听childe,比较耗资源,现改进为childe类醒来后主动联系父类2.代码Test.javaclass Child implements Runnable { private Dad dad; public Child(Dad...
阅读全文
摘要:一、概述1.情景:孩子睡觉,醒后要吃东西,用java模拟此情况2.设计:child类,Dad类,都继承Runnable,dad线程监视child线程(缺点:因为要监视,所以耗cup资源)二、代码Test.javaclass Child implements Runnable { private b...
阅读全文
摘要:一、概述1.目标:模拟Spring的Ioc2.用到的知识点:利用jdom的xpath读取xml文件,反射二、有如下文件:1.applicationContext.xml 2.BeanFactory.javapublic interface BeanFactory { Object getB...
阅读全文