`
文章列表
1 JVM调优总结 数据类型堆与栈Java对象的大小引用类型
外观模式和中介者模式: 外观模式是针对模块的外部系统使用使用,相当于外观模式把一个系统所有的功能打包好了,提供一些接口给外界来使用这个系统的功能;中介者模式是针对模块内部,各个系统之间的互相调度。   桥接模式和策略模式: Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性。 Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。 因此可以想象一般情况下Bridge的实现几乎不会在运行时更改而Strategy的算法则很有可能需要在运行时更换,这就导致在细节方面需要考虑的因素可能会很不相同。  
一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用 就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用 ◆AbstractCalculator父类: public abstract class AbstractCalculator {   /*主方法,实现对本类其它方法的调用 ...
一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。 Context类是一个上下文环境类,Plus和Minus分别是用来计算的实现   public interface Expression { public int interpret(Context context); }     public class Plus implements Expression ...
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。 如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。 User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高, 为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类,里面持有User1和User2的实例,用来实现对User1和User2的控制 ...
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。 访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。 若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。 访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。 其缺点就是增加新的数据结构很困难。   简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。 ▲一个Vis ...
核心思想就是:当对象的状态改变时,同时改变其行为。 很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态, 所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。 ▼State类是个状态类(这里用DispenserState)及实现类 public interface DispenserState {     void press(); }     public class FullState implements DispenserState {         @Over ...
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些, 通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态, 类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。   Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。 Memento类是备忘录类,Storage类是存储备忘录的类,持有Memento类的实例,该模式很好理解。 ◆Original类: public class Original {   private Strin ...
命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。 这个过程好在,三者相互解耦,任何一方都不用去依赖 ...
接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。 但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。   Abstracthandler类提供了get和set方法,方便MyHandle类设置和修改引用对象,MyHandle类是核心,实例化后生成一系列相互持有的对象,构成一条链。 ★接口: public interface Handler { public void operator(); }   ★抽象类: pu ...
迭代器模式就是顺序访问聚集中的对象。一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。 这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,我们来看看实现 ▲两个接口: public interface Collection {   public Iterator iterator();   /*取得集合元素*/ public Object get(int i);   /*取得集合大小*/ public int size(); } publi ...
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。 需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数 ●抽象折扣类: public interface MemberStrategy {     /**      * 计算图书的价格      * @param booksPrice    图书的原价      * @return    计算出打折后的价格      */     public double calcPrice(double book ...
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。       FlyWeightFactory(1..n)→   FlyWeight ↑↗ ↖     ClientFlyWeight1    FlyWeight2       FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象。 如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。 一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特 ...
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便 ▲代码: public class TreeNode {   private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();   public TreeNode(String name){ this.name = name; }     public String getName() { return name; }     ...
包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文最开始的那个图。观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。 我解释下这些类的作用:MySubject类就是我们的主对象,Observer1和Observer2是依赖于MySubject的对象,当MySubject变化时,Observer1和Observ ...
Global site tag (gtag.js) - Google Analytics