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

    装饰设计模式

    装饰设计模式概述

    装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类,是继承的替代方案

    优点

    使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能

    缺点

    正因为可以随意组合,所以就可能出现一些不合理的逻辑

    public class Test {
    	public static void main(String[] args) throws Exception {
    		Phone p = new IPhone();
    		p.call();
    		System.out.println("----");
    
    		// 需求:先彩铃,后接电话
    		PhoneDecorator pd = new RingPhoneDecorator(p);
    		pd.call();
    		System.out.println("----");
    
    		// 需求:先接电话,后听音乐
    		pd = new MusicPhoneDecorator(p);
    		pd.call();
    		System.out.println("----");
    
    		// 需求:先彩铃,再接电话,后听音乐
    		pd = new RingPhoneDecorator(new MusicPhoneDecorator(p));
    		pd.call();
    	}
    }
    
    interface Phone {// 接口
    	public abstract void call();
    }
    
    class IPhone implements Phone {// 实现接口
    	public void call() {
    		System.out.println("call");
    	}
    }
    
    abstract class PhoneDecorator implements Phone {// 装饰类
    	private Phone p;
    
    	public PhoneDecorator(Phone p) {
    		this.p = p;
    	}
    
    	public void call() {
    		this.p.call();
    	}
    }
    
    class RingPhoneDecorator extends PhoneDecorator {// 彩铃
    
    	public RingPhoneDecorator(Phone p) {
    		super(p);
    		// TODO Auto-generated constructor stub
    	}
    
    	public void call() {
    		System.out.println("ring");
    		super.call();
    	}
    }
    
    class MusicPhoneDecorator extends PhoneDecorator {// 音乐
    
    	public MusicPhoneDecorator(Phone p) {
    		super(p);
    		// TODO Auto-generated constructor stub
    	}
    
    	public void call() {
    		super.call();
    		System.out.println("music");
    	}
    }
    

    组合,装饰模式用于IO流

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.Scanner;
    
    public class Test {
    	public static void main(String[] args) throws Exception {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    		Scanner sc = new Scanner(System.in);
    	}
    }
    
  • 相关阅读:
    Ubuntu 18.04 LTS 启用BBR
    MySQL with JDBC <一>
    HTML 实录 <一>
    Nginx CloudFlare 客户端真实IP
    Ubuntu 16.04 释放升级到 18.04 后, man: command exited with status 4
    JSP 从入门到精通 <一>
    Nginx URL重写
    JavaScript 修改 CSS 伪类属性
    i-83.net quadhost子产品
    HTML 重定向 页面跳转
  • 原文地址:https://www.cnblogs.com/denggelin/p/6358362.html
Copyright © 2011-2022 走看看