1.适配器模式(Adapter)
概述:
在软件开发过程中,我们要经常要复用我们以前开发的一些“现存对象”,但是这些“现存对象”并不能满足我们新的应用环境。怎样才能良好的复用这些对象,以满足我们的应用环境,这就是适配器(Adapter)所要解决的问题。
意图:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
——《设计模式》GOF
生活中的例子:
在现实生活中,像这种适配器我们经常见到,而且还是经常使用它,如:手机(深信大家都见过),我们手机在充电的时候,不可能直接在220V电源上直接充电,而是手机“充电器”.列如我们
的电脑也不可能直接在220V电影上直接冲电,也用到了电源适配器,然而电脑电源适配器和手机电源
适配器又有所不同。
有两类适配器模式:
·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。
类适配器模式:
/** * 电源适配器接口 * @author tanlvxu * */ public interface SuittedPower { public int getCorrectPower(); } /** * 220V电源类 * @author tanlvxu * */ public class Power { public int getPower(){ //得到220V电压 return 220 ; } } /** * 电脑适配器类 * @author tanlvxu * */ public class ComputerAdapter extends Power implements SuittedPower{ @Override public int getCorrectPower() { int power = super.getPower() ;//得到电源电压 //经过一些手段改变电压 return power/2 ; } } /** * 手机适配器类 * @author tanlvxu * */ public class PhoneAdapter extends Power implements SuittedPower{ @Override public int getCorrectPower() { int power = super.getPower() ;//得到电源电压 //经过一些手段改变电压 return power/3 ; } } /** * 测试类 * @author tanlvxu * */ public class MainTest { public static void main(String[] args) { SuittedPower pAdapter = new PhoneAdapter() ; System.out.println("手机得到的电压是: "+pAdapter.getCorrectPower()) ; SuittedPower cAdapter = new ComputerAdapter() ; System.out.println("电脑得到的电压是: "+cAdapter.getCorrectPower()) ; } }
对象适配器模式:
将Power类的实例对象作为参数传递到适配器类
Power power = new Power() ;
ComputerAdapter cAdapter = new ComputerAdapter(power);
cAdapter.gerCorrectPower() ;
在SurfaceView中要画出各种状态,又要展示以前所画的,
所以就采用一个GameState抽象类
public abstract class GameState{
private GameState gameState = null ;
public GameState(GameState gameState){
this.gameState = gameState ;
}
public void rDraw(Canvas canvas){
gameState.draw() ;
}
//子类重写该方法
public void draw(Canvas canvas) ;
}
2.外观模式(Facade)和 组合模式(Composite)
外观模式又称门面模式,它是为了给子系统中提供一个一致的界面,从面定义了一个高层接口 ,这个接口使得这一子系统更加容易使用。
列如我们以前写的Socket客户端,客户程序可能会像下图一样零乱。
这样错综复杂,极有可能影响到客户端的性能
外观模式就是为了解决这种问题而产生的,下面是使用了门用模式后的图
我们可以这样设计:1.client
/** * 消息类 * @author tanlvxu * */ public class Message { private int type; private String content; public Message(int type,String content){ this.type = type ; this.content = content ; } //以及属性所对应的getter,setter方法 } /** * 模拟从服务器读取信息 * @author tanlvxu * */ public class ReadMsg implements Runnable{ public ReadMsg(){ Thread thread = new Thread(this) ; thread.start() ; } @Override public void run() { //从服务器读取信息 Message mes = new Message(1,"再见孙悟空") ; for(ListenerAdapter ls : MyConfig.list ){ ls.dealMsg(mes) ; } } }
2.facade:用一个静态对象List来做桥梁
/** * facade * @author tanlvxu * */ public interface MyConfig { List<ListenerAdapter> list = new ArrayList<ListenerAdapter>() ; }
3.ClietUI:这里运用了组合模式(Composite)
自定各种组件,实现其独自的监听模式,然后组装起来,互不干扰
/** * 自定义JFrame * @author tanlvxu * */ public class MyJFrame extends JFrame{ public void jf(){ this.setSize(400,400) ; MyButton button = new MyButton(); ButtonListener bListener = new ButtonListener(button) ; MyConfig.list.add(bListener) ; button.addActionListener(bListener) ; this.add(button) ; this.setVisible(true) ; } public static void main(String[] args) { new MyJFrame().jf(); new ReadMsg(); } } /** * 消息处理接口 * @author tanlvxu * */ public interface ListenerAdapter{ public void dealMsg(Message msg) ; } /** * 自定义按钮监听 * @author tanlvxu * */ public class ButtonListener implements ListenerAdapter,ActionListener{ private Button button = null ; public ButtonListener(Button button){ this.button = button ; } @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub System.out.println("AMB"); } @Override public void dealMsg(Message msg) { button.setLabel(msg.getContent()) ; } } /** * 自定义Button * @author tanlvxu * */ public class MyButton extends Button { private ListenerAdapter lAdapter = null; public void setListerAdapter(ListenerAdapter lAdapter){ this.lAdapter = lAdapter ; } }
3.桥接模式(Bridge):引用行者买刀的理解
桥梁模式的宗旨就是将抽象部分与它的实现部分分离,使它们都可以独立的变化
这里引用网上的一个蜡笔的例子我觉得很是恰到好处。
“
小时候我们都用蜡笔画画,一盒蜡笔12种颜色。一开始我都是用最小号的蜡笔画个太阳公公、月亮婆婆足够
了。后来开始画一些抽象派的作品,就得换中号的了,要不然画个背景都要描半天,好一盒中号的也是12种颜
色。再后来我开始转向豪放派,中号就有些捉襟见肘了,只好换大号的了,好一盒大号的也只有12种颜色。你
看,像我这样不太出名的画家就需要36种画笔,哇,太麻烦了。但是据我观察,另一些比我出名的画家倒是没
有这么多笔,他们只有几把刷子和一些颜料,这样就解决了蜡笔的“种类爆炸”问题。”
这样做起来往往会有事半功倍的效果
相关推荐
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...
### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...
今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...
### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
《Java设计模式》课程设计报告主要探讨了如何利用Java编程语言和MyEclipse集成开发环境来实现基于设计模式的西瓜市场系统。这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为...
本文将深入探讨Java设计模式中的四大接口型模式——适配器模式(Adapter)、外观模式(Facade)、合成模式(Composite)以及桥接模式(Bridge),并分析它们的应用场景。 #### 二、适配器模式 适配器模式是一种结构型设计...
单例模式是最常见的创建型模式之一,它确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过私有构造函数、静态私有变量和公共静态方法来实现单例模式。 3. 工厂模式 工厂模式是另一种常用的创建型模式,它将...
抽象工厂模式同样是创建型模式之一,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式适用于当一个系统需要创建一组相关的对象,但具体类不确定的情况。抽象工厂模式可以有效地...
Java作为一门广泛应用的开发语言,其设计模式的应用对于提高代码质量、可维护性和可扩展性至关重要。本文将着重探讨创建型模式、结构型模式和行为模式这三大类设计模式,并结合六项设计原则进行深入解析。 首先,...
题目中的第一个选项“同一问题的不同表现形式”(A) 描述了设计模式的主要应用场景之一。设计模式帮助开发者处理常见的软件设计难题,确保代码的可读性、可维护性和可扩展性。 ### 2. 面向对象的基本原则 面向对象...
Java设计模式是软件工程中的一种最佳实践,它提供了一套标准的解决方案,用于解决在编写可维护、可扩展和高效代码时经常遇到的问题。这些模式是经验丰富的开发者们在面对相似问题时,经过反复试验和优化后总结出的...
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....
### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...
《Java设计模式(疯狂Java联盟版)》是深入探讨Java编程中设计模式的一本权威著作。设计模式是软件工程中的重要概念,它总结了在解决特定问题时,经过时间检验的有效解决方案,为软件开发提供了可复用的、面向对象的...
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种描述在特定情况下,如何设计和实现软件组件的经典方法。这些模式是经过...