如果两个类的某个方法90%代码一样,怎么重用?
把不同的地方,抽出来变成一个方法,然后这两个类是继承关系,然后覆盖那个不同地方的方法就可以了~~~~
public abstract class CaffeineBeverage{
final void prepareRecipe(){
boilWater(); //固定的
brew(); //抽象的-----可以更加子类定制
pourInCup(); //固定的
addCondiments(); //抽象的
}
protected abstract void brew();
protected abstract void addCondiments();
void boilWater(){
//实现
}
void pourInCup(){
//实现
}
}
//但是有时候这些流程不是每个子类都有的,怎么办
//下面使用判断语句,使得流程可选
public abstract class CaffeineBeverage{
final void prepareRecipe(){
boilWater(); //固定的
brew(); //抽象的-----可以更加子类定制
if(getPourInCup()){
pourInCup(); //固定的
}
addCondiments(); //抽象的
}
abstract void brew(); //本来是可以用传参数的方法来处理变化的部分,但是java不支持传递函数这种类型作为参数,这样做就会有一个缺点,就是子类只能由一个这种实现,如果子类的这个部分也是变化的,怎么办。。?????方法是把这个东西变成接口,然后当作参数传递进来
abstract void addCondiments();
void boilWater(){
//实现
}
void pourInCup(){
//实现
}
public boolean getPourInCup(){
return true;
}
}
//Java中的模板方法-----Array.sort();----这个方法里面封装了怎么排序,可以对任意数字排序,但是怎么排的实现在子类中,所以子类要实现Comparable接口
public class Duck implements Comparable{
~~~~~
public int compareTo(Object obj){
Duck otherDuck = (Duck)obj;
if(this.weight - otherDuck.weight <0){
return -1;
}else if(this.weight - otherDuck.weight >0){
return 1;
}else {
return 0;
}
}
}
Duck[] ducks = {~~~~~};
Array.sort(ducks);
//Swing中JFrame中的paint()方法。。。在默认状态下,paint()是不做事情的,因为它是一个"钩子",通过覆盖paint(),你可以将自己的代码插入JFrame的算法中,显示你所要话的图。。。。没想到这是一个模板方法的应用
-----------------------------------------------------------------------------------------------
模板方法的缺点:---多层次继承的缺点
父类有一个方法A,Son继承了这个方法,然后GrandSon也继承了这个方法,问题是突然有一天Son要重写父类的这个方法,他敢吗?绝对不敢,GrandSon可是要从Father继承过来这个方法A,你修改了,那就要修改Son和GrandSon之间的关系,那么这个风险就大了
但是桥梁模式描述了类间弱关联关系,Father类完全可以把可能变化的方法放出去,Son子类要有这个方法很简单,桥梁搭过去,获得这个方法,GrandSon也一样,即使你Son子类不想使用这个方法了,也没有关系,不会对GrandSon产生影响。。。
继承的好处,对于比较明确不变化的,通过继承来完成,若不能确定是否会变化,那么就芮乃伟是会变化的,通过桥梁模式来解决
也就是说变化的子类里面也有变化,变化中的变化
因为有抽象类,说明具体类不同-----》调用者在变化
因为有接口,说明接口外的东西是不稳定的---》被调用者在变化
随着时代的发展,枪在不停的变化改进。与此同时枪的子弹也在改进,很多子弹赋予了新功能:比如信号弹,救援弹,甚至是炸蛋(这里故意写错,要不然javaeye不让发表)。这样,枪是抽象的同时,子弹也是抽象的。二者组合起来变换无穷。
与策略模式不同在于: 算法(过程)是不变的,变的是被调用者
分享到:
相关推荐
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template Method...
├─第一章 旭瑶-小滴架构师成长系列软件设计模式课程介绍 │ 1.2设计模式全家桶课程大纲速览.mp4 │ ├─第二章 想成为架构师的你,不可不知道的...│ 6.1-接口之间的桥梁-适配器设计模式你知道多少.mp4 │ 6.4
在软件工程中,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于各种编程语言,包括PHP。本篇文章将深入探讨“适配器模式”在PHP5中的实现及其重要性。 适配器模式是一种结构型设计模式,它的主要目的...
设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码。本文档以幽默的方式介绍了Java中的主要设计模式,并探讨了...
根据提供的文档概览,我们可以对每个章节所涉及的设计模式进行详细的阐述和解释。下面将针对文档中提及的设计模式逐一展开,以便更好地理解这些模式的概念、结构、应用场景以及优缺点。 ### 1. 面向对象程序设计...
综上所述,MVC模式和模板模式都是在软件开发中广泛应用的设计模式,它们各自解决了特定的设计问题。MVC模式通过分离关注点提高了应用程序的灵活性和可维护性,而模板模式则通过封装变化点来增强代码的复用性。在实际...
☆ 资源说明:☆《修炼Java开发技术 在架构中体验设计模式和算法之美》 (随书源代码)☆ 开发环境:☆IntelliJ IDEA 13.1.5 Build 135.1289☆ 章节说明:☆Chapter 02 架构中的设计原则 - (Chapter02.rar)Chapter 03 ...
《深入浅出理解框架SSH与MVC设计模式》 在当今的Java EE开发领域,SSH(Struts2、Hibernate、Spring)框架与MVC设计模式是开发者必须掌握的核心技术。这些框架不仅简化了开发流程,提高了开发效率,而且在解决传统...
涵盖了策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式、装饰模式、迭代器模式等十四种常用的设计模式。 策略模式...
### Java和Android源码设计模式解析 #### 前言:设计模式的重要性 设计模式是软件工程中的一个重要概念,它代表了一种最佳实践,能够帮助开发者解决常见的编程问题。掌握设计模式不仅能够提升代码的质量,还能提高...
模板方法模式(Template Method)定义了操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。命令模式(Command)将请求封装为一个对象,以便使用不同的...
【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...
设计模式是一种在特定情境下解决常见问题的模板或策略,它们帮助开发者更好地组织代码,提高代码的可维护性和可复用性。常见的设计模式包括: - **创建型模式**:关注的是对象的创建机制,使创建过程更加灵活和可控...
- 模板模式:在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 以上是设计模式的基本概念及其分类。在实战应用中,每...
在软件开发领域,设计模式是经过时间和实践验证的解决方案模板,用于解决常见问题。本作业以“软件设计模式”为主题,特别关注了装饰模式、工厂模式和适配器模式的运用。这三种模式都是面向对象设计的核心部分,它们...
《设计模式》一书还探讨了其他重要模式,如单例模式(Singleton)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、享元模式(Flyweight)、桥接模式(Bridge)、...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
### Java的23种设计模式详解 #### 一、引言 设计模式是软件工程领域的一个重要概念,它提供了一套解决常见问题的有效方案。在Java编程中,掌握设计模式对于提升代码质量和可维护性至关重要。本文将详细介绍23种经典...