JDK IO中的适配器模式和装饰者模式
来源:互联网 发布:nginx 反向代理403 编辑:程序博客网 时间:2024/04/29 20:00
适配器模式
类图如下:
- Target表示目标接口, 也就是客户端认可的标准接口, 只有符合target接口规范的类(实现了target接口),才能为Client工作。
- Adaptee表示需要适配的类, 这个类的特征是没实现target接口, 不符合标准, 但是它却提供了一些特殊功能, 还想被Client所用, 那么就需要一个适配器来让Client能够调用 这个被适配器标准化的特殊功能类
- Adapter 适配器类, 适配器可以分为多种适配器
- 类适配器
- 对象适配器(委托方式)
上图为类适配器
上图为对象适配器
一、类适配器
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类class Adaptee { public void specificRequest() { System.out.println("被适配类具有 特殊功能..."); }}
// 目标接口,或称为标准接口interface Target { public void request();}// 具体目标类,只提供普通功能class ConcreteTarget implements Target { public void request() { System.out.println("普通类 具有 普通功能..."); }}
// 适配器类,继承了被适配类,同时实现标准接口class Adapter extends Adaptee implements Target{ public void request() { super.specificRequest(); }}
// 测试类public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类 Target adapter = new Adapter(); adapter.request(); }}
二、对象适配器
// 适配器类,直接关联被适配类,同时实现标准接口class Adapter implements Target{ // 直接关联被适配类 private Adaptee adaptee; // 可以通过构造函数传入具体需要适配的被适配类对象 public Adapter (Adaptee adaptee) { this.adaptee = adaptee; } public void request() { // 这里是使用委托的方式完成特殊功能 this.adaptee.specificRequest(); }}
// 测试类public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类, // 需要先创建一个被适配类的对象作为参数 Target adapter = new Adapter(new Adaptee()); adapter.request(); }}
三、JDK中InputStreamReader对象适配器体现
装饰者模式
装饰者模式就是动态的将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更优弹性的解决方案。
先来看一些怎么用代码来描述装饰者。
类图:
假设我要买一杯饮料, 我可以选择加各种调料, 每种调料都有不一样的价钱, 我可以加多种调料。每次加调料我都可以动态的计算价格。
饮料抽象类:
public abstract class Beverage { String description = "Unkown Beverage"; public String getDescription() { return description; } public abstract double cost();}
装饰者抽象类:
public abstract class CondimentDecorator extends Beverage { public abstract String getDescription();}
具体饮料Espresso:
public class Espresso extends Beverage { public Espresso() { description = "Espresso"; } @Override public double cost() { return 0.3; }}
我要加Mocha调料:
public class Mocha extends CondimentDecorator { Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Mocha"; } @Override public double cost() { return 0.2 + beverage.cost(); }}
计算价格:
public class MainTest { public static void main(String[] args) { //我先定一杯饮料 Beverage espresso = new Espresso(); //我要加一些调料 用mocha调料去装饰espresso饮料 Mocha mocha = new Mocha(espresso); //计算总价钱 System.out.println(mocha.getDescription()); System.out.println(mocha.cost()); }}
在JDK IO中
1 0
- JDK IO中的适配器模式和装饰者模式
- Java IO中的装饰器模式(Decorator)和适配器模式(Adapter)
- 适配器模式和装饰者模式
- 适配器模式和装饰模式
- JDK中的适配器模式
- 装饰者、适配器和外观模式详解
- 代理模式,适配器模式和装饰模式'
- 适配器模式&装饰者模式&外观模式
- “装饰者模式”和“对象适配器模式”异同
- 适配器模式和装饰器模式
- 适配器模式和装饰器模式
- java装饰模式和适配器模式区别
- JDK中的设计模式之装饰者模式
- JDK中的设计模式之装饰模式
- Java IO流之装饰模式与适配器模式讲解
- JDK中的设计模式之适配器模式
- 设计模式--适配器模式(JDK中的应用)
- 适配器模式、装饰模式、代理模式和外观模式
- Select2练习
- H5拍照/图片上传js
- 【新品】1299起 小米平板3用联发科!19999元 小米要发“战斗机”?
- Objective-C self关键字
- 5015. 决斗
- JDK IO中的适配器模式和装饰者模式
- 【NOIP2013模拟联考15】人类基因组(genes)
- DNS
- 在页面中添加样式的方法 css
- 多表连接问题
- mysql的索引规约
- Objective-C(iOS)严格单例模式正确实现
- 关于maven以及ActiveMQ
- MySQL数据库视图:视图定义、创建视图、修改视图