- 浏览: 145994 次
- 性别:
- 来自: 广州
文章列表
备忘录模式就是把保存的细节封装在Memento中。
应用场景:Memento模式比较适用于需要维护或记录属性历史的类。
主要缺点:角色状态需要完整的存储到备忘录对象中,如果状态数据很大很多,将会非常的消耗资源。
public class GameRole {
private String name;
private int vitality; // 生命力
private int attrack; // 攻击力
private int defence; // 防御力
public GameRole(String name) {
this.name = ...
- 2013-09-25 23:01
- 浏览 540
- 评论(0)
排序方法1:
public class Sort1 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("d", 2);
map.put("c", 1);
map.put("b", 1);
map.put("a", 3);
List<Map.Entry<String, Integer& ...
- 2013-09-24 21:48
- 浏览 502
- 评论(0)
适配器模式:将一个类的接口转换成客户希望看到的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。
//Target类,客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口
public class Target
{
public void request()
{
System.out.println("普通请求!");
}
}
//Adaptee类,需要适配的类
public class Adaptee extend ...
- 2013-09-21 22:32
- 浏览 406
- 评论(0)
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
//State类,抽象状态类,定义一个接口以封装与Context的一 ...
- 2013-09-21 21:47
- 浏览 505
- 评论(0)
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
//Department类
public class Department
{
private int id;
private String name;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName ...
- 2013-09-21 19:04
- 浏览 540
- 评论(0)
观察者模式又叫发布-订阅(Publish/Subscribe)模式。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
//Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或一个接口实现。它把所有对观察者对象的引用保存在一个聚集里面,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以拉回和删除观察者对象。
public abstract class Subject
{
private List<Observer> observers = new Ar ...
- 2013-09-21 17:50
- 浏览 419
- 评论(0)
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。使用建造者模式,用户只需指定需要建造的类型,具体的建造细节不需要知道。
建造者模式使得建造代码与表示代码分离,若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
Builder用于定义建造的者的通用抽象类,(定义了建造者应该有的方法)
ConcreteBuilder类为具体的建造者,继承了Builder类,持有一个需要建造的对象
Director类中定义了具体的 ...
- 2013-09-10 22:51
- 浏览 609
- 评论(0)
Client客户端只和Facade打交道,而Facade方法中封装了多个其他复杂方法。
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,从而使得客户端不需要知道一些更加细节的东西。充分体现了依赖倒转原则(高层模块不依赖低层模块,它们都依赖于抽象)和迪米特法则(如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用)。
//基金类
public class Fund
{
Stock1 gu1;
Stock2 gu2;
Stock3 ...
- 2013-09-10 22:00
- 浏览 313
- 评论(0)
迪米特法则(LoD)(也叫最少知识原则),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
迪米特法则的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,即一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。
迪米特法则的根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及,也就是说,信息的隐藏促进了软件的复用。
- 2013-09-09 23:07
- 浏览 545
- 评论(0)
模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模版方法模式是通过把不变行为搬移到超类,取出子类中的重复代码来体现它的优势。
//AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
public abstract class AbstractClass
{
public abstract void primitiveOp ...
- 2013-09-09 22:46
- 浏览 507
- 评论(0)
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的其它对象的引用都仍然指向原来的对象。
//工作经历类
public class WorkExperience
{
private String workDate;
private String company;
public String getWorkDate()
{
return workDat ...
- 2013-09-09 22:40
- 浏览 572
- 评论(0)
代理持有被代理对象的引用,代理对象调用持有被代理对象的引用来调用被代理对象的方法,其中,代理对象和被代理对象要实现共同接口。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
//代理接口
public interface GiveGift
{
void giveDolls();
void giveFlowers();
void giveChocolate();
}
//追求者类
public class Pursuit implements GiveGift
{
SchoolGirl mm;
public Pursuit(SchoolGirl mm)
{
t ...
- 2013-09-09 22:25
- 浏览 568
- 评论(0)
新建一个bravo project工程时,运行时候报错:
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at ja ...
项目需要学习PostgreSQL,在windows 7下学习安装PostgreSQL 9.x。过程记录如下:
一、安装准备工作
下载PostgreSQL安装文件:
官方下载地址:http://www.enterprisedb.com/products-services-training/pgdownload。此官方下载地址提供32位和64位版本,请 ...
如何找出两个大文件中的数据不同部分
问题描述:对比两个大于4G的日志文件A和B,如何高效的找出A和B中的数据不同部分。
整体思路:
第一步:文件分割;将大文件分割成多个小文件。本文采用哈希函数来分割大文件,扫描文件A,对每行字符求hash(url) % M,url是文件中的一行字符串,本文中的hash函数取JDK自带的hashCode方法,M表示分解的文件数目。根据所得的值,将url写入到对应的小文件中,如hash(url) % M = 4,则写入第四个文件中。如此,大文件A可以分为<a(0),a(1),a(2),...a(M-1)>,同理,大文件B可以分为<b(0) ...