`
man_yutao
  • 浏览: 39522 次
  • 性别: 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();// 我就动动嘴就行,其实不是我干,哈
}
}



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

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

相关推荐

    广发证券长安汽车000625品牌向上筑牢盈利底座,转型构建

    "转型构建全新壁垒"则表明长安汽车正在积极进行业务模式和战略转型。这可能涉及向电动化、智能化、网联化的方向发展,适应全球汽车行业的新趋势。公司可能正在投资建设新能源汽车生产线,研发自动驾驶技术,或者优化...

    java设计模式考试题.docx

    22. **方法的向上转型**:在继承关系下,方法向超类方向聚集,意味着子类可以覆盖或实现超类的方法,但不能新增方法。 这些知识点涵盖了设计模式的基础概念、原则和应用场景,是理解和应用设计模式的基础。在实际...

    由浅入深学工厂模式.doc

    《由浅入深学工厂模式》是一篇关于设计模式中工厂模式的深度解析文档,旨在帮助读者理解并掌握这一重要设计原则。工厂模式是软件工程中广泛应用的一种创建型设计模式,它提供了一种抽象化的方式来创建对象,使得代码...

    由浅入深学“工厂模式”.doc

    简单工厂不是GOF的23种设计模式之一,但它有助于理解其他更复杂的工厂模式。 2. **工厂方法模式**: 工厂方法模式将产品类的创建职责委托给子类,每个子类对应一个具体的产品。这种方式增强了系统的可扩展性,当...

    Delphi模式编程第一分卷

    2.3.2 向上转型 2.3.3 向下转型 2.4 接口抽象机制 2.4.1 接口的概念 2.4.2 抽象类 2.4.3 对象接口 2.4.4 抽象类与对象接口的比较 2.4.5 针对接口而不是针对实现编程 第3章 模式编程法则 3.1 开闭法则(OCP...

    汽车行业周报:自主品牌发力向上,加速转型智慧出行公司.rar

    这得益于对研发的持续投入、创新设计以及对本土市场的深度理解。自主品牌如比亚迪、吉利、蔚来等,不仅在国内市场表现强劲,也开始在全球舞台上崭露头角。 2. 技术驱动的创新:自主品牌在电动化、智能化领域展现出...

    整体指标向上改善,业务模式转型初见成效.pdf

    2. 业务模式转型:碧水源公司业务模式从传统的模式转向以EPC(设计、采购、建设)为主的轻资产模式。转型过程中,公司加大了EPC订单的获取以及核心技术膜产品销售的力度,这种转型提升了公司的盈利能力。 3. 财务...

    Delphi模式编程第二分卷

    2.3.2 向上转型 2.3.3 向下转型 2.4 接口抽象机制 2.4.1 接口的概念 2.4.2 抽象类 2.4.3 对象接口 2.4.4 抽象类与对象接口的比较 2.4.5 针对接口而不是针对实现编程 第3章 模式编程法则 3.1 开闭...

    互联网行业数字化转型数据架构设计方法论及典型案例.pptx

    数据架构是数字化转型的核心组成部分之一,其重要性表现在: 1. **数据整合与治理**:确保数据的准确性、一致性和安全性。 2. **数据分析与挖掘**:支持企业进行深入的数据分析,为决策提供依据。 3. **数据驱动的...

    java 子类对象赋值给父类对象的使用

    通过以上讨论,我们可以看到,Java中子类对象赋值给父类对象是一种强大且灵活的设计模式,它允许我们在代码中使用抽象的父类引用,从而简化编程,增加代码的通用性和可维护性。在实际项目中,合理利用这一特性,能够...

    IBM 与 Cisco 的银行网点转型解决方案

    IBM 和 Cisco 合作推出的银行网点转型解决方案旨在利用先进的技术和创新方法,重新定义传统银行...这种转型不仅仅是技术层面的更新,更是一次银行业务模式和客户服务模式的革新,预示着银行业未来的可能性和发展方向。

    Java面向对象的3大特征之多态

    在实际应用中,多态常常与设计模式紧密相关,例如策略模式、工厂模式等,都大量利用了多态的特性。这些模式通过多态的方式,能够在不修改现有代码的情况下,引入新的功能和对象,极大地提高了代码的复用性和系统的...

    JAVA面向对象程序设计

    11. 复杂问题的解决:可能会涉及设计模式、算法等更高层次的面向对象编程实践。 在"work0508"这个文件中,可能包含的是针对以上知识点的习题,解题时需结合理论知识,通过编写和运行Java代码来验证和加深理解。对于...

    java资料

    2. **Template Method.doc**:模板方法设计模式是面向对象设计模式之一。它定义了一个操作中的算法框架,将一些步骤延迟到子类中。这样使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 3. **...

    java学习笔记 java学习笔记

    多态性是Java面向对象的特性之一,表现为方法的重载和覆写以及对象的向上转型和向下转型。 - 向上转型(父类引用指向子类对象)允许任何子类对象赋值给父类引用,调用的方法是子类覆写过的版本。 - 向下转型...

    java 语言基础总结

    在Java中,多态主要体现在方法重写(覆盖)和向上转型。子类对象可以被当作父类对象处理,这样就可以调用父类中的方法,即使这个方法在子类中有不同的实现。 6. **接口** 接口在Java中是一种完全抽象的类型,用于...

    新经典-603096-图书策划发行拐点向上,行业复苏.zip

    文件中的报告可能详细分析了该公司如何把握行业拐点,实现业绩增长,以及其在数字化转型和市场策略上的独特之处。 综上所述,图书策划发行行业正面临一个重要的转折点,这不仅关乎企业自身的战略调整,也反映了整个...

    28.接口基本定义版.pdf

    * 接口的对象利用子类对象的向上转型进行实例化操作。 例如: ``` interface A { public static final String MSG = "Hello World."; public abstract void print(); } interface B { public abstract void fun...

    java多态的总结

    此外,多态也提高了代码的复用性,比如在设计模式中,工厂方法、策略模式等都大量应用了多态。 要充分利用Java的多态性,还需要了解以下几点: 1. 抽象类与接口:抽象类可以包含抽象方法和非抽象方法,而接口只能...

    毕向东0801视频

    同时,多态也是实现设计模式,如工厂模式、策略模式等的基础。 接下来,通过《黑马程序员_毕向东_Java基础视频教程第08天-02-面向对象(多态-扩展性).avi》深入探讨了多态的扩展性。这部分内容可能包括了接口...

Global site tag (gtag.js) - Google Analytics