5.19Java装饰器设计模式
2021-05-28 05:03
标签:name nis 对象 高性能 keyword 装饰类 http def 单例 之前我们所说的都是节点流,Java当中的节点流就是直接与数据源交互的程序。为了提升性能、操作方便需要进行装饰处理
高内聚,低耦合--->常见的设计模式有:单例、工厂、装饰、代理... 组织代码的固定模式和套路--->固定类、方法等设计 抽象组件--->相当于接口、抽象父类等 具体的组件--->需要装饰的对象 抽象装饰类--->包含了组件的引用,以及装饰着共有的方法 具体装饰类--->被装饰的对象 IO流当中的装饰是为了后期处理数据类型、对象、缓冲的时候提高性能,方便后期操作 抽象组件: 具体组件: 抽象装饰类: 具体装饰器: 抽象组件--->接口、抽象父类,需要装饰的抽象对象 具体的组件--->需要装饰的对象--->具体来说就是上个代码的Person类 抽象装饰类:包含了对抽象组件的引用,以及装饰着共有的方法 具体的装饰类:被装饰的对象 5.19Java装饰器设计模式 标签:name nis 对象 高性能 keyword 装饰类 http def 单例 原文地址:https://www.cnblogs.com/JunkingBoy/p/14787051.html5.19Java装饰器设计模式
设计模式浅谈
设计方法
装饰器例子--->模拟放大器
/**
* 定义一个接口,里面定义了声音的具体实现方法
*/
interface Say{
void say();
}/**
* 定义一个接口,里面定义了声音的具体实现方法
*/
interface Say{
void say();
}
?
/**
* 定义一个Person类,实现接口
*/
class Person implements Say{
//定义该类有的属性
private int voice = 10;
?
//写一个setBean方法
public void setVoice(int voice) {
this.voice = voice;
}
?
//写一个getBean方法
public int getVoice() {
return voice;
}
?
//实现接口的方法
@Override
public void say(){
System.out.println("人的声音为:" + this.getVoice());
}
}/*
这个项目中无
*//**
* 放大器类,放大声音
*/
class Amplifer implements Say{
/*实现对人声音的装饰*/
private Person p;
/*将这个放大属性放入构造器当中*/
Amplifer(Person p){
this.p = p;
}
?
/*实现接口的方法*/
@Override
public void say(){
System.out.println("人的声音为:" + p.getVoice() * 100);
System.out.println("噪音!!!");
}
/*
加了一个私有属性--->需要放大的类的属性
再构造器将Person类对象传入
调用原对象的方法进行处理!!!--->很关键,玩转类跟类的关系
两个类实现同一个接口,再类与类之间进行方法调用
*/
}模拟咖啡牛奶
/**
* 抽象组件--->接口
*/
interface Drink{
/*费用*/
double cost();
/*说明*/
String info();
}/**
* 具体组件-->咖啡
*/
class Coffee implements Drink{
/*定义类属性*/
private String name = "原味咖啡";
?
/*重写接口当中的方法*/
@Override
public double cost(){
/*原为咖啡的价格*/
return 10;
}
?
@Override
public String info(){
return name;
}
}/**
* 抽象装饰类--->相当于牛奶和糖
*/
abstract class Decorate implements Drink{
//对抽象组件的引用
private Drink drink;
/*将引用写入构造器中*/
public Decorate(Drink drink){
this.drink = drink;
}
?
@Override
public double cost() {
return this.drink.cost();
}
?
@Override
public String info() {
return this.drink.info();
}
}/**
* 具体的装饰类--->牛奶
*/
class Milk extends Decorate {
?
public Milk(Drink drink) {
super(drink);
}
?
/*对其重写抽象类当中的方法*/
@Override
public double cost() {
return super.cost() * 4; //四倍价格
}
?
@Override
public String info() {
return super.info() + "加入了牛奶!";
}
}
?
/**
* 具体的装饰类--->糖
*/
class Suger extends Decorate {
?
public Suger(Drink drink) {
super(drink);
}
?
/*对其重写抽象类当中的方法*/
@Override
public double cost() {
return super.cost() * 2; //四倍价格
}
?
@Override
public String info() {
return super.info() + "加入了蔗糖!";
}
}