文档章节

接口应用——策略模式

来来来过来挨到我坐
 来来来过来挨到我坐
发布于 2016/01/26 15:40
字数 301
阅读 2
收藏 0

策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。


OO设计原则:

  1. 面向接口编程(面向抽象编程)

  2. 封装变化

  3. 多用组合,少用继承

package com.main;

//策略设计模式
public class StrategyPattern {

	public static void main(String[] args) {
		Duck trueDuck = new TrueDuck("真鸭子");
		trueDuck.setSwim(new SwimImpl());// 设置游泳的具体实现
		trueDuck.swim();
		System.out.println("--------------");
		Duck modelDuck = new ModelDuck("模型鸭子");
		modelDuck.setSwim(new NotSwimImpl());// 设置游泳的具体实现
		modelDuck.swim();
	}

}

// 是否会游泳的接口(将游泳这一种能力抽象出来)
interface Swimable {
	public void swim();
}

// Swimable接口的实现类1
class SwimImpl implements Swimable {

	@Override
	public void swim() {
		System.out.println("会游泳");
	}
}

// Swimable接口的实现类2
class NotSwimImpl implements Swimable {

	@Override
	public void swim() {
		System.out.println("不会游泳");
	}
}

class Duck {
	private String name;
	// 只说明有游泳这个属性,并不去确定是否会游泳
	private Swimable swim;

	public void setSwim(Swimable swim) {
		this.swim = swim;
	}

	public Duck(String name) {
		this.name = name;
	}

	public void swim() {
		System.out.print("我是" + name + ",");
		swim.swim();
	}

}

// 真鸭子具体类
class TrueDuck extends Duck {

	public TrueDuck(String name) {
		super(name);
	}
}

// 模型鸭子具体类
class ModelDuck extends Duck {

	public ModelDuck(String name) {
		super(name);
	}
}


© 著作权归作者所有

共有 人打赏支持
来来来过来挨到我坐
粉丝 2
博文 13
码字总数 7493
作品 0
程序员
私信 提问
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
Java设计模式之抽象工厂模式

抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法。通常,工厂模式的所有产...

断桥残雪断桥残雪
2015/08/09
0
0
编程中的那些套路——关于简单工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 面向对象五大原则中有一点非常重要的原则:单一职责原则。 简单工厂模式就是遵循了这一原则,它让不同职...

gzchen
08/27
0
0
编程中的那些套路——关于工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 前面我们写了简单工厂模式,《编程中的那些套路——关于简单工厂模式》,但简单工厂模式有一些不足(违反...

gzchen
08/27
0
0
Java 中的 GoF 设计模式(第一部分)

为了理解 GoF(Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人组)的设计模式原理和历史,我制作了一个 10 分钟的短视频。(作为 PluralSight 作者试录的) 视频:https...

王桥修道院副院长
2017/02/13
2.6K
3

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
今天
24
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
今天
28
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
34
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
44
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部