`
man_yutao
  • 浏览: 38803 次
  • 性别: Icon_minigender_1
  • 来自: 梦的国度
社区版块
存档分类
最新评论

设计模式之向上转型

阅读更多
    都说看源码提升很快,而看源码的要有设计模式的基础,否则会很难过的。为此我挑选了本不错的设计模式书,学习中发现所谓的设计的模式,并不是多么高深的 东西,仅仅是利用对象的多态性的技巧而已,而且向上转型几乎无处不在。

    现在言归正题,先说向上转型,我们都知道对象既可以作为它自己本身类型来使用,也可以作为它的基类型使用。而这种将对某个对象的引用视为对其基类型的引用的作法被称作向上转型。

    先说下策略模式(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换),这是一个美好的家庭,老汉的两个儿子都要尽孝心,老汉这挑个儿子一起生活,我们来看下代码。

        先定义一个接口,这是父亲
	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();// 我就动动嘴就行,其实不是我干,哈
}
}



发没发现这两个模式有点相像的地方,没错,策略模式中也有一个代理,只不过这个代理没有实现接口。

先谈两个模式,其他的以后在说,欢迎拍砖,哈
分享到:
评论

相关推荐

    设计模式之蝉

    高清版的设计模式之蝉(第二版),附个人看书笔记,Java语言。

    JAVA设计模式chm文档

    设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计...

    设计模式之美—学习笔记

    设计模式之美—学习笔记,纯手打,学习极客时间课程得到。 如有意见或建议,欢迎联系,一起学习讨论。

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    人人都懂设计模式 人人都懂设计模式

    人人都懂设计模式 设计模式是软件开发中的一种解决方案,它提供了一种通用的设计思想和方法论,可以帮助开发者更好地设计和实现软件系统。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 在本书中...

    C_设计模式(23种设计模式)

    C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...

    设计模式之美PPT,个人学习整理

    设计模式之美PPT,个人学习整理

    Java设计模式之禅

    设计模式相关内容,深入浅出可以一看的书籍。初学者可以下载看看

    您的设计模式,我们的设计模式 java设计模式

    您的设计模式我们的设计模式,简单明了的设计模式是设计模式学习必备的书籍

    java设计模式之禅

    设计模式-轻松让你读懂java。包含java所有的设计模式,什么情况下应用什么样的设计模式。读者看完可以对java的设计模式有很好的了解,可以编写出低耦合的代码

    设计模式精解 设计模式精解

    设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式 设计模式精解设计模式精解设计模式精解...

    设计模式之禅电子版(百度网盘下载【包含链接与提取码】)

    设计模式之禅,一种思想书,会一直受益,初学,工作一年,三年认识都不一样。 也算是软件开发的思想启蒙,看书介绍说:能让你设计一个优秀的代码结构,写一段健壮的代码,比较容易的解决一些复杂的需求。

    python设计模式第2版.pdf

    设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...

    24种设计模式以及混合设计模式

    24中设计模式 混合设计模式 设计模式实际应用案例 费了很多时间和精力整理的

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    设计模式与游戏完美开发

    设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏...

    设计模式之禅 mobi

    设计模式之禅 mobi kindle

    java 设计模式之禅

    java 设计模式之禅 6大设计原则 23种设计模式 设计模式pk 设计模式混淆应用

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    设计模式之《大话设计模式》.pptx

    设计模式之《大话设计模式》.pptx

Global site tag (gtag.js) - Google Analytics