zoukankan      html  css  js  c++  java
  • 装饰设计模式 Decorator

    package lesson06;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    
    public class Demo01 {
    
    	public static void main(String[] args) {
    		//
    		/**
    		 * 一、设计模式【一种固定代码风格】
    		 *     面试题:Java中有哪些设计模式
    		 *     常用设计模式:装饰模式、单例模式、模版模式、适配器模式、代理模式、工厂模式...
    		 * 
    		 * 二、装饰(Decorator)设计模式
    		 * 	1.装饰模式的概念:
    			装饰模式是动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。
    			装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。
    			装饰模式是创建一个包装对象,也就是使用装饰来包裹真实的对象。	
    		    
    		    2.装饰模式的实现方式
    				1. 装饰对象和真实对象有相同的接口/抽象类。
    				2. 装饰对象包含一个真实对象的引用(reference)
    				3. 装饰对象的所有方法,内部实现都是通过真实对象的引用来调用,然后实现自己的功能
    
    			3.适用性
    				1. 需要扩展一个类的功能,或给一个类添加附加职责。
    				2. 当不能采用生成子类来实现,比如final类	
    		 */
    		
    	/*	BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
    		BufferedOutputStream bos;
    		BufferedReader br;
    		BufferedWriter bw;*/
    		
    		/*GYFStudent stu = new GYFStudent();
    		stu.code();*/
    		
    		GYFStudent stu = new GYFStudent(new UniversityStudent());
    		stu.code();
    	}
    
    }
    
    //1.接口
    interface Person{
    	public void code();
    }
    
    //2.接口实现类
    final class UniversityStudent implements Person{
    
    	@Override
    	public void code() {
    		// TODO Auto-generated method stub
    		System.out.println("在大学期间学了一点点C语言...");
    	}
    }
    
    /*class GYFStudent extends UniversityStudent{
    	@Override
    	public void code() {
    		// TODO Auto-generated method stub
    		super.code();
    		System.out.println("在GYF IT EDU 学习Java语言...");
    	}
    }*/
    
    class GYFStudent implements Person{
    
    	private UniversityStudent us;
    	public GYFStudent(UniversityStudent us){
    		this.us = us;
    	}
    	
    	//装饰对象的所有方法,内部实现都是通过真实对象的引用来调用,然后实现自己的功能
    	@Override
    	public void code() {
    		us.code();
    		System.out.println("在GYF IT EDU 学习Java语言...");
    	}
    	
    }
    

      

  • 相关阅读:
    [Laravel] mac下通过 homestead 搭建环境 到运行项目
    Mac下Laravel的Homestead环境配置
    Window10 下安装 Laravel / Homestead 视频
    Windows 10下Laravel的开发环境安装及部署(Vagrant + Homestead)
    Apache 调用不同的 PHP 版本
    inux系统用户名和全名有什么区别
    oracle 学习day01
    rpm
    Linux下可以使用ps命令来查看Oracle相关的进程
    oracle 建用户
  • 原文地址:https://www.cnblogs.com/2eggs/p/12552106.html
Copyright © 2011-2022 走看看