码迷,mamicode.com
首页 > 编程语言 > 详细

5.19Java装饰器设计模式

时间:2021-05-24 16:45:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:name   nis   对象   高性能   keyword   装饰类   http   def   单例   

5.19Java装饰器设计模式

之前我们所说的都是节点流,Java当中的节点流就是直接与数据源交互的程序。为了提升性能、操作方便需要进行装饰处理

技术图片

设计模式浅谈

高内聚,低耦合--->常见的设计模式有:单例、工厂、装饰、代理...

组织代码的固定模式和套路--->固定类、方法等设计

设计方法
  • 抽象组件--->相当于接口、抽象父类等

  • 具体的组件--->需要装饰的对象

  • 抽象装饰类--->包含了组件的引用,以及装饰着共有的方法

  • 具体装饰类--->被装饰的对象

IO流当中的装饰是为了后期处理数据类型、对象、缓冲的时候提高性能,方便后期操作

装饰器例子--->模拟放大器

抽象组件:

/**
* 定义一个接口,里面定义了声音的具体实现方法
*/
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();
}

具体的组件--->需要装饰的对象--->具体来说就是上个代码的Person类

/**
* 具体组件-->咖啡
*/
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() + "加入了蔗糖!";
  }
}

 

5.19Java装饰器设计模式

标签:name   nis   对象   高性能   keyword   装饰类   http   def   单例   

原文地址:https://www.cnblogs.com/JunkingBoy/p/14787051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!