设计模式之向上转型
都说看源码提升很快,而看源码的要有设计模式的基础,否则会很难过的。为此我挑选了本不错的设计模式书,学习中发现所谓的设计的模式,并不是多么高深的 东西,仅仅是利用对象的多态性的技巧而已,而且向上转型几乎无处不在。
现在言归正题,先说向上转型,我们都知道对象既可以作为它自己本身类型来使用,也可以作为它的基类型使用。而这种将对某个对象的引用视为对其基类型的引用的作法被称作向上转型。
先说下策略模式(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换),这是一个美好的家庭,老汉的两个儿子都要尽孝心,老汉这挑个儿子一起生活,我们来看下代码。
先定义一个接口,这是父亲
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();// 我就动动嘴就行,其实不是我干,哈}}