1.策略设计模式

  创建一个能够根据所传递的参数对象的不同而具有不同的方法,被称为策略设计模式。这类方法包含索要执行的算法中固定不变的部分,而“策略”包含变化的部分。策略就是传递进去的参数对象。在下面的代码示例中,Process对象就是策略。应用在了s上。

代码示例:

class Process {
public String getName(){
return getClass().getSimpleName();
}
Object process(Object input){
return input;
}
} class Upcase extends Process {
String process(Object input){
return ((String)input).toUpperCase();
}
} class Lowercase extends Process {
String process(Object input){
return ((String)input).toLowerCase();
}
} public class Strategy{
public static void process(Process p,Object s){
System.out.println("Using Process " + p.getName());
System.out.println(p.process(s));
}
public static String s="this is strategy design model!"; public static void main(String[] args) {
process(new Upcase(),s);
process(new Lowercase(),s);
}
}
输出:
Using Process Upcase
THIS IS STRATEGY DESIGN MODEL!
Using Process Lowercase
this is strategy design model!

 2.适配器设计模式

  接收所拥有的接口,产生所需要的接口。

代码示例:

public class adapter {
public static void main(String[] args) {
new Ademo(new Bdemo()).getBMethod();
}
} class Ademo{
Bdemo b;
public Ademo(Bdemo b){
this.b = b;
}
public void getBMethod(){
b.out();
}
} class Bdemo{
void out(){
System.out.println("use b's mothod!");
}
}
输出:
use b's mothod!

3.工厂设计模式

  3.1 普通工厂:

  用于生成遵循某个接口的对象。

代码示例:

public class factory {
public static void main(String[] args) {
Service a = ServiceFactory.getDemoA();
a.out();
Service b = ServiceFactory.getDemoB();
b.out();
}
} interface Service{
void out();
} class demoA implements Service{ @Override
public void out() {
System.out.println("i am dome_a !");
}
} class demoB implements Service{ @Override
public void out() {
System.out.println("i am dome_b !");
}
} class ServiceFactory{
public static Service getDemoA(){
return new demoA();
}
public static Service getDemoB(){
return new demoB();
}
}
输出:
i am dome_a !
i am dome_b !

  3.2 使用匿名内部类工厂:

代码示例:

public class InnerClassFactory {
public static void playGame(GameFactory factory){
Game game = factory.getGame();
game.play();
} public static void main(String[] args) {
playGame(Football.factory);
playGame(Basketball.factory);
}
} interface Game{
void play();
}
interface GameFactory{
Game getGame();
} class Football implements Game{ @Override
public void play() {
System.out.println("play football game!");
}
public static GameFactory factory = new GameFactory(){ @Override
public Game getGame() {
return new Football();
}
};
} class Basketball implements Game{ @Override
public void play() {
System.out.println("play basketball game!");
}
public static GameFactory factory = new GameFactory(){ @Override
public Game getGame() {
return new Basketball();
}
};
}
输出:
play football game!
play basketball game!

  注:相较而言,普通工厂在项目中的使用较多一些,而第二种匿名内部类工厂模式,使用较少。

 

《java编程思想》:设计模式(不定期更新)的更多相关文章

  1. Java编程思想—读书笔记(更新中)

    第1章 对象导论 1.4 被隐藏的具体实现 访问控制的原因: 让客户端程序员无法触及他们不应该触及的部分(不是用户解决特定问题所需的接口的一部分) 允许库设计者可以改变类内容的工作方式而不用担心会影响 ...

  2. JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)

    switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...

  3. 《Java编程思想》读书笔记

    前言 这个月一直没更新,就是一直在读这本<Java编程思想>,这本书可以在Java业界被传神的一本书,无论谁谈起这本书都说好,不管这个人是否真的读过这本书,都说啊,这本书很好.然后再看这边 ...

  4. 《Java编程思想》阅读笔记二

    Java编程思想 这是一个通过对<Java编程思想>(Think in java)进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会忽略或 ...

  5. Java编程思想(第4版) 中文清晰PDF完整版

    Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区  作者:Linux [字体:大 中 小]     <Java编程思想>这本书赢得了全 ...

  6. 《Java编程思想》读书笔记(二)

    三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...

  7. 《Java编程思想》读书笔记(四)

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...

  8. 《Java编程思想》读书笔记(五)

    前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...

  9. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  10. Java编程思想学习(八) 内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...

随机推荐

  1. 【电子签章】HTML格式合同转化成PDF文件

    代码地址如下:http://www.demodashi.com/demo/12476.html 一.主要思路 通过itextpdf 生成想要的pdf 文件 通过itextpdf 中 XMLWorker ...

  2. layui-简单辅助元素 - 页面元素

    本篇主要集中罗列页面中的一些简单辅助元素,如:引用块.字段集区块.横线等等,这些元素都无需依赖任何模块 <!DOCTYPE html> <html> <head> ...

  3. Web前端开发--JS技术大梳理

    什么是JS      JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语 ...

  4. Xenomai 3 POSIX

    Xenomai 3在架构设计上确实优先Xenomai 2,至少对开发者来说,少维护了不少东西,看下面两张图就知道了 第一张图是Xenomai2的,第二张图是Xenomai3的,Xenomai3在内核中 ...

  5. 身份证归属地查询免费api接口代码

    描写叙述 :依据身份证编号 查询归属地信息. 身份证实体类: package org.wx.xhelper.model; /** * 身份证实体类 * @author wangxw * @versio ...

  6. List中remove元素的理解

    今天写了个简单的list中remove元素的方法,结果报错... List<String> ll = Arrays.asList("1","2",& ...

  7. WPF SDK研究 之 数据绑定

    这一章介绍数据绑定.本章共计27个示例,全都在VS2008下.NET3.5测试通过,点击这里下载:ConnectedData.rar 1.ShowDataWithoutBinding注: <?M ...

  8. 使用T4模板技术

    1.右键->添加->新建项,选择“文本模板” 2.修改代码为: <#@ template debug="false" hostspecific="fal ...

  9. RocksDB

    RocksDB RocksDB is a high performance[1][2][3][4][5] embedded database for key-value data. It is a f ...

  10. HTML 学习笔记 JQuery(DOM 操作3)

    设置和获取HTML 文本 和 值 1.html()方法 类似于JavaScript中的innerHTML属性,可以用来读取或者设置某个元素中的HTML内容 例子 <html> <he ...