[color=blue]今天从图书馆借了本 Head First设计模式,小看了一章,感觉挺不错的所以写下来当作备忘:[/color]
[size=medium][color=brown]书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.以下是一个简单的实例,具体的流程是:
先把公共的信息定义在一个父类或者是父接口中,该父类或者父接口中的变量用的都是接口类型(这些接口类型都有其实现的具体子类,暂称为a吧),然后在实现或者继承了父接口或者父类的子类(暂称为b)中针对的是父类或者父接口中的接口进行编程,最后在测试类或者是具体功能类中只需实例化a后赋给针对接口类型编程的地方,这样一来就可以实现具体算法与具体用户之间的独立和替换;[/color][/size]
首先是父接口:
接着是两个接口的定义:
然后是实现了父接口的子类:
然后是实现了接口的具体类:
最后当然少不了一个测试类:
[size=medium][color=brown]书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.以下是一个简单的实例,具体的流程是:
先把公共的信息定义在一个父类或者是父接口中,该父类或者父接口中的变量用的都是接口类型(这些接口类型都有其实现的具体子类,暂称为a吧),然后在实现或者继承了父接口或者父类的子类(暂称为b)中针对的是父类或者父接口中的接口进行编程,最后在测试类或者是具体功能类中只需实例化a后赋给针对接口类型编程的地方,这样一来就可以实现具体算法与具体用户之间的独立和替换;[/color][/size]
首先是父接口:
package com.jie.pattern;
public interface Duck {
public IFly fly=null; //这里两个都是接口类型
public ICry cry=null; //
public void display();
}
接着是两个接口的定义:
package com.jie.pattern;
public interface IFly {
public void fly();
}
package com.jie.pattern;
public interface ICry {
public void cry();
}
然后是实现了父接口的子类:
package com.jie.pattern;
public class FlyDuck implements Duck{
public IFly fly=null;
public FlyDuck()
{
}
public void setFly(IFly fly)
{
this.fly=fly;
}
public void fly()
{
fly.fly();
}
public void display()
{
System.out.println("Fly's duck...");
}
}
然后是实现了接口的具体类:
package com.jie.pattern;
public class FlyDuck implements Duck{
public IFly fly=null;
public FlyDuck()
{
}
public void setFly(IFly fly)
{
this.fly=fly;
}
public void fly()
{
fly.fly();
}
public void display()
{
System.out.println("Fly's duck...");
}
}
最后当然少不了一个测试类:
package com.jie.pattern;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FlyDuck flyDuck=new FlyDuck();
flyDuck.setFly(new SubFly());//这里可以用实现了接口的具体类的实例来进行替代;
flyDuck.fly();
}
}