`
56553655
  • 浏览: 204157 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

应该传入父类的地方却传入的父类,这个设计模式叫什么名字?

阅读更多
public class T4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = getChild();
		B b = new ChildB();
		b.test(a);//test方法需要的是子类,但是这里传入的是父类;
		
	}
	static A getChild(){
		ChildA a = new ChildA();
		a.setType("1");
		a.setOther("2");
		return a;
	}
	
}
interface A{
	public String getType();
}
class ChildA implements A{
	String type=null;
	String other=null;
	public String getOther() {
		return other;
	}
	public void setOther(String other) {
		this.other = other;
	}
	@Override
	public String getType() {
		// TODO Auto-generated method stub
		return type;
	}
	public void setType(String type){
		this.type = type;
	}
	
}
interface B<T>{
	void test(T a);
}
class ChildB implements B<ChildA>{

	@Override
	public void test(ChildA a) {
		System.out.println(a.getOther());		
	}
	
}

    以上代码在main方法中的第三行代码,传入了一个父类参数,但是ChildB定义的是其子类,根据里氏代换原则,只有传入父类的地方,可以传入子类,但是在传入子类的地方传入父类却是违背里氏代换原则的,通常情况下是会报错的;但是这里实现了一个B接口后,这样的的实现却是可以的,并且还可以将值打印出来,这是为什么呢?

    这是什么样的设计模式,名称叫什么呢,一下子却想不起来了!

============================================

    后来咨询了相关的同事后,觉得这样写有这样写的好处,因为这里涉及到多个不同业务的处理,而不同的业务之间可能有不同的属性,如果是直接通过传入接口作为参数,那那个时候不同的业务处理起来就会受限制,通过采取这样继承泛型的接口,可以保证传入任何类型的字类都是可以的,从而满足不同的业务需求;但是这里也提到一点,这样的可读性并不好,因为这给后期其它的开发人员的维护带来了理解上的困难。

分享到:
评论
2 楼 56553655 2010-07-24  
非常感谢
1 楼 c.zhiwu 2010-07-23  
这是面向接口编程, 很多设计模式都存在这种现象, 包括策略模式,复合模式等等等等

相关推荐

    设计模式面试题

    ### 设计模式面试题知识点详解 #### 一、设计模式概览及常见设计模式解析 在软件工程领域,设计模式是一套被广泛接受的解决特定问题的解决方案模板。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式...

    设计模式之工厂系列

    在软件开发领域,设计模式是一种经过验证的、通用的解决方案,用于解决常见的设计问题。"设计模式之工厂系列"指的是几种不同的工厂模式,它们都是面向对象设计中的重要组成部分,尤其在Java编程语言中广泛使用。工厂...

    设计模式小结

    ### 设计模式精要 设计模式是软件工程领域的一个重要概念,它提供了一套解决常见问题的模板,有助于...通过上述总结,我们不难发现,每种模式都有其适用场景和限制,选择合适的设计模式是每个开发者应该具备的能力。

    设计模式V2.0.doc

    设计模式是一种在特定情况下解决软件设计问题的通用可复用解决方案的描述,它不是具体的代码,而是一种描述在某些特定情况下如何设计类和对象的模板。在Java中,设计模式被广泛应用于构建可维护性、扩展性和灵活性高...

    23种设计模式分析学习笔记(Java版)

    首先,我们可以将学习设计模式的过程比作禅修,起初我们可能看到模式就如山、水一般明显,急于在所有地方应用它们,但随着深入理解和实践,我们会逐渐意识到模式背后的本质是设计理念和原则。设计模式并非孤立存在,...

    Java设计模式笔记

    Java设计模式是软件开发中的一种最佳实践,它旨在提高代码的可维护性、可复用性和灵活性。设计模式是解决常见问题的经验总结,分为创建型、结构型和行为型三类。本文将详细讲解Java设计模式的一些核心原则和模式。 ...

    JAVA设计模式.pdf

    简单工厂模式是一种常用的类的创建型设计模式,它的主要目的是提供一个统一的接口来创建一系列相关的或者相互依赖的对象,而无需指定它们具体的类。简单工厂模式将对象的创建过程封装在一个单独的工厂类中,从而降低...

    23种设计模式的总结,每种模式包含一个例子和类图说明

    简单工厂模式是创建型设计模式之一,通过一个工厂类来生产多种产品类的实例。例如,一个水果工厂生产各种水果,水果工厂类根据参数决定生产哪种水果。简单工厂模式的优点是客户端只需要知道传入工厂类的参数,就能...

    设计模式之里氏转换原则

    里氏转换原则是设计模式中一个重要的理论基础,它对实现这些模式起到关键的指导作用。 1. **什么是里氏转换原则:** - LSP指出,如果一个软件实体使用的是父类型的引用,那么它应该能透明地使用子类型的实例,而...

    设计模式-实例代码

    "设计模式-实例代码"这个主题显然聚焦于通过实际代码来讲解设计模式的应用。在这里,我们将深入探讨设计模式的核心概念以及工厂模式作为示例。 设计模式是经验丰富的开发者们在解决重复出现的问题时总结出来的一种...

    设计模式UML图--工厂模式

    - 定义:在简单工厂模式中,有一个静态工厂类负责创建对象,这个工厂类根据传入的参数决定返回哪个具体类的实例。 - UML图表示:简单工厂模式通常包含一个工厂类、一个抽象产品类(或接口)和若干个具体产品类。在...

    2020版Java设计模式 10 道.pdf

    设计模式是软件开发中的一种通用解决方案,它们是针对常见设计问题的经验总结,可以在不同场景下重复使用。在Java中,有多种设计模式被广泛应用。以下是根据题目提供的部分内容详细阐述的十个关键知识点: 1. **...

    简单工厂设计模式

    ### 简单工厂设计模式概述 简单工厂模式(Simple Factory Pattern)是设计模式中较为基础的一种模式,属于创建型模式。它通过提供一个统一的接口来创建一系列相关的或相互依赖的对象,而无需指定具体类。 #### ...

    JAVA设计模式之工厂模式

    ### JAVA设计模式之工厂模式 #### 一、工厂模式概述 工厂模式是一种常见的设计模式,主要应用于当系统中存在大量的类实例化需求时。通过工厂模式,我们可以避免直接使用`new`关键字创建对象,而是通过工厂类来创建...

    简单工厂设计模式实现的计算器

    简单工厂设计模式是一种常用的设计模式,它在软件工程中用于创建对象,特别是在需要根据特定条件创建不同类的对象时。在这个实现的计算器项目中,我们利用了简单工厂模式,结合了面向对象编程的三大特性——继承、...

    Java设计模式,并加上个人理解

    《Java设计模式及其个人理解》 设计模式是软件开发中的一种通用解决方案,是对在特定上下文中反复出现的问题的模板化解答。它体现了优秀的编程实践,旨在提高代码的可重用性,降低开发成本,增强代码的可维护性和可...

    软件系统设计-设计模式 - 具体设计模式1

    设计模式是软件开发中的一种重要概念,用于解决常见的设计问题并提供可复用的解决方案。在给定的文件中,提到了三种具体的设计模式:策略模式、简单工厂模式和工厂方法模式,以及一种抽象设计模式——抽象工厂模式。...

    设计模式---东拼西凑(基础)

    ### 设计模式基础知识点 #### 一、设计模式概述 设计模式是一种被广泛采用的解决方案模板,用于解决软件设计中的常见问题。它不仅有助于代码的重用,还提高了代码的可读性和可靠性。设计模式是软件工程的重要组成...

    深入浅出设计模式

    设计模式是软件工程领域中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式大致可以分为...

Global site tag (gtag.js) - Google Analytics