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种画笔,哇,太麻烦了。但是据我观察,另一些比我出名的画家倒是没
有这么多笔,他们只有几把刷子和一些颜料,这样就解决了蜡笔的“种类爆炸”问题。”
这样做起来往往会有事半功倍的效果
相关推荐
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...
设计模式是一套被重复使用的代码设计经验的总结,本书面向有一定Java语言基础和一定编程经验的读者。旨在培养读者良好的设计模式思维方式,加强对面向对象思想的理解。全书共分12章,首先强调了接口和抽象类在设计...
JAVA设计模式,定义:提供创建对象的接口. 为何使用? 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...
计算机后端-Java-图解java设计模式063 接口适配器.avi
计算机后端-Java-图解java设计模式008 接口隔离.avi
计算机后端-Java-图解java设计模式010 接口隔.avi
计算机后端-Java-图解java设计模式009 接口隔离.avi
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元...
参考:马士兵 Java设计模式 Iterator 1.首先定义一个容器Collection接口. 2.定义一个Iterator迭代器的接口 3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain...
适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....
23个经典JDK设计模式 下面是JDK中有关23个经典设计模式的示例: Structural(结构模式) Adapter: 把一个接口或是类变成另外一种。 ● java.util.Arrays#asList() ● javax.swing.JTable(TableModel) ● java.io....
* Lesson 0[《设计模式简介》](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson0) * Lesson 1 [简单工厂模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson1) * ...
课程目标:掌握7个设计原则,掌握UML建模,掌握常用设计模式,了解其他设计模式,Java设计模式,本教程可以帮助你服务项目,优化项目,实现程序的高效运行。〖课程目录〗:源码详情+=','+15783;2019Java设计模式...
工厂模式按照《Java 与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种...
单例模式是最常见的创建型模式之一,它确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过私有构造函数、静态私有变量和公共静态方法来实现单例模式。 3. 工厂模式 工厂模式是另一种常用的创建型模式,它将...
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...
java 设计模式与Jar库 里氏代换原则LSP 依赖倒转原则DIP 接口隔离原则ISP 合成/聚合复用原则CARP
java设计模式【之】桥接模式【源码】【场景:老师上课】 * 桥接模式 * 将抽象与实现分离,通过组合抽象进行交互 * (由指定人员制定接口规则,由其他人员实现接口规则) * * 桥接:描述的是关联关系,实现上...