从新开始更新自己的技术成长,记录成长点滴,好记性不如烂笔头,备忘。
根据设计模式即《head first》书中指导,该类设计模式共23种,这些模式又可归类分为构造型模式、结构型模式、行为型模式。今天就从先记录行为型中的策略模式开始。
为什么要先写策略模式呢,因为策略模式简单,可以引出相应的面向对象设计的一些相关的注意点。
策略模式在书中的定义是将算法族分别封装起来,让他们之间可以互相替换,作用是让算法的变化独立与使用算法的客户。
举个例子:现在基本上手机的普遍率为100%了,如洛基亚、Iphone、小米,现在让你使用代码模拟各类手机的的例子,
如手机缺省铃声、手机拍照功能、手机本省型号。如何实现呢?
原始做法如下:
public class IPhone{
say(){...};//缺省铃声
takephoto(){。。。}//拍照
display{};//获取本身手机信息
}
public class xiaomi{
say(){...}
takephoto(){。。。}
display{};
}
上面的例子代码的重复性太多,而且如果需要给手机随意添加一项功能/属性,则需要大量的维护原有的代码,不易于后期维护。为了使得代码可维护,也许我们可以使用我们所了解的面向对象原则,抽象出手机共有属性及方法,如下所示:
public class MPhone{
say();
takephoto(){};
display{//。。。};
}
抽象出共有方法,如say、takephoto交由手机的基类进行实现,各类手机只需要继承基类,将自动获得基类的方法。如下:
public class IPhone extend Mphone{
}
如上所示,所有继承Mphone手机的子类都将拥有父类的say();takephoto();display()方法。但是现实情况我们发现,各类手机的缺省铃声都是不一样的,那该怎么办?
当然我们也可以进行一下处理;
public abstract class IPhone{
say();
takephoto();
display(){
//获取手机本身型号。
};
}
将方法抽象,把具体实现交由各个具体子类中实现,这样做,每种手机可以在自己的类中写各自的实现。如
public class xiaomiPhone extend Mphone{
say(){"小米手机铃声"};
takephoto(){"小米手机拍照功能"}
}
那么,现在要大家将小米手机和苹果手机的铃声进行切换,这样,我们就发现麻烦了。按照上面的代码继续编写的话,我们将陷入不断的修改中...
如此,也就引出了策略模式:将算法族分别封装起来,让他们之间可以互相替换,作用是让算法的变化独立与使用算法的客户。其实这也是在我们进行面向对象设计的很重要的一点,
面向接口编程。
完整代码实例如下:
//手机基类
public abstract class phone{
PhoneBehaviour phoneBehaviour;
public void setPhoneBehaviour(PhoneBehaviour phoneBehaviour){
this.phoneBehaviour=phoneBehaviour;
}
public void say(){
phoneBehaviour.Say();
}
public void takephoto(){
phoneBehaviour.takephoto();
}
public abstract String display();
//获取手机本省属性
}
//行为接口
public interface PhoneBehaviour{
say();
takephoto();
}
//小米手机具体行为类
public class xiaomiPhoneImpl implements PhoneBehaviour{
say("我是小米手机");
takephoto(){"小米手机拍照功能"}
}
//苹果手机具体行为类
public class IPhoneImpl implements PhoneBehaviour{
say("我是苹果手机");
takephoto(){"苹果拍照功能"}
}
接下来,我们分别创建小米手机和苹果手机
//构建小米手机
public class xiaomiPhone extend phone{
public String display(){
//
}
}
//构建苹果手机
public class IPhone extend phone{
public String display(){
//
}
现在我们就可以让苹果手机发出小米手机的铃声,并且让苹果手机还是使用苹果手机的拍照功能;
public static void main(String[] args) {
Iphone iphone=new Iphone();
iphone.setPhoneBehaviour(new xiaomiPhoneImpl() );
iphone.say();
iphone.setPhoneBehaviour(new IPhoneImpl() );
iphone.takephoto();
}
分享到:
相关推荐
在这个"php设计模式-策略模式-例题学习"的例子中,我们将深入理解策略模式的运用及其在PHP中的实现。 首先,让我们来看看核心的类和接口: 1. `HandStrategyInterface.php`: 这个文件定义了一个接口`...
在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C++中,策略模式主要用于封装一系列算法,并让它们之间可以互相替换,使得算法的变化独立于使用算法的客户。这种模式通常涉及三个主要角色:策略...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在.NET开发中,策略模式经常被用来处理算法的可变性和封装多种算法于一个系统的情况。此压缩包文件包含的是关于策略模式的源代码示例,以及可能的一个...
策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口和多个实现该接口的类...
策略模式作为其中一种行为设计模式,它的主要目的是使算法族能够互换,让算法的变化独立于使用它的客户端。策略模式使得代码更加灵活,易于扩展,并且能够降低系统的耦合度。 策略模式的核心思想是定义一系列的算法...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在iOS开发中,特别是在iPad和iPhone应用的实现过程中,策略模式可以帮助我们处理复杂的业务逻辑,使得代码更灵活、可扩展性更强。 《深入浅出设计...
JAVA-设计模式-行为型模式-策略模式
策略模式是一种设计模式,它允许程序在运行时选择不同的算法或行为,而不是在编译时就固定下来。这种模式的核心思想是将算法封装在独立的策略类中,使得算法的变化不会影响到使用算法的客户端代码。通过这种方式,...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并让它们之间可以互相...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中...
在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
Java设计模式——策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一族算法,并将每一个算法封装起来,使它们可以互相替换。这种模式让算法的变化独立于使用算法的客户。 在Java中,...
北大青鸟关于设计模式的PPT,讲述的非常清晰,对于初学设计模式的人来说,非常有用。本篇是关于策略模式的PPT