都说看源码提升很快,而看源码的要有设计模式的基础,否则会很难过的。为此我挑选了本不错的设计模式书,学习中发现所谓的设计的模式,并不是多么高深的 东西,仅仅是利用对象的多态性的技巧而已,而且向上转型几乎无处不在。
现在言归正题,先说向上转型,我们都知道对象既可以作为它自己本身类型来使用,也可以作为它的基类型使用。而这种将对某个对象的引用视为对其基类型的引用的作法被称作向上转型。
先说下策略模式(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换),这是一个美好的家庭,老汉的两个儿子都要尽孝心,老汉这挑个儿子一起生活,我们来看下代码。
先定义一个接口,这是父亲
再添加两个实现类,这是大儿子
这是小儿子
封装角色,想和哪个儿子过,叫来就行
重点来了,看下调用
再看下代理模式(为其他对象提供一种代理以控制对这个对象的访问),也不知道例子恰当否。
主题接口,中央来文件了,要造林
真实主题类,种树工人,负责种树
代理类,这是政绩,怎么能少了我们官员,我来指挥
情景类
发没发现这两个模式有点相像的地方,没错,策略模式中也有一个代理,只不过这个代理没有实现接口。
先谈两个模式,其他的以后在说,欢迎拍砖,哈
现在言归正题,先说向上转型,我们都知道对象既可以作为它自己本身类型来使用,也可以作为它的基类型使用。而这种将对某个对象的引用视为对其基类型的引用的作法被称作向上转型。
先说下策略模式(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换),这是一个美好的家庭,老汉的两个儿子都要尽孝心,老汉这挑个儿子一起生活,我们来看下代码。
先定义一个接口,这是父亲
public interface Strategy{
public void doSomething();
}
再添加两个实现类,这是大儿子
public class ConcreteStrategy1 implements Strategy{
public void doSomething(){
System.out.println("大儿子养老");
}
}
这是小儿子
public class ConcreteStrategy2 implements Strategy{
public void doSomething(){
System.out.println("小儿子养老");
}
}
封装角色,想和哪个儿子过,叫来就行
public class Context{
private Strategy strategy=null;//定义的是接口的类型,只要是自己的亲生骨肉,来哪个都行
public Context(Strategy _strategy){
this.strategy=_strategy;
}
public void doAnything(){
strategy.doSomething();
}
}
重点来了,看下调用
public class Client{
public static void main(String[] args){
Strategy strategy =new ConcreteStrategy1();//看这里,向上转型,这里是灵魂,我能向上转是因为我是老爷子的亲儿子
Context context=new Context(strategy);
context.doAnything();
}
}
再看下代理模式(为其他对象提供一种代理以控制对这个对象的访问),也不知道例子恰当否。
主题接口,中央来文件了,要造林
public interface Subject{
public void request();
}
真实主题类,种树工人,负责种树
public class RealSubject implements Subject {
public void request(){
System.out.println("我工人来种树");
}
}
代理类,这是政绩,怎么能少了我们官员,我来指挥
public class Proxy implements Subject {
private Subject subject =null;//又见接口
public proxy(Subject _subject ){//我想指挥谁,就指挥谁,当官就是爽
this.subject=_subject;
}
public void request(){//那个谁呀,你小子去种树把
subject.request();
}
}
情景类
public class Client{
public static void main(String[] args){
Subject subject=new RealSubject();//组织决定你去种树了,不要辜负党和人民的期望呀
//这里又见向上转型,你老真是无处不在,佩服佩服呀
Proxy proxy=new Proxy(subject);//当官执行种树命令
proxy.request();// 我就动动嘴就行,其实不是我干,哈
}
}
发没发现这两个模式有点相像的地方,没错,策略模式中也有一个代理,只不过这个代理没有实现接口。
先谈两个模式,其他的以后在说,欢迎拍砖,哈