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

    package com.decorate;
    
    public class Iphone implements Phone{
    
        @Override
        public void call() {
            System.out.println("手机可以打电话");
        }
    
    
    }
    package com.decorate;
    
    public interface Phone{
        public void call();//打电话
    }
    package com.decorate;
    
    public abstract class PhoneDecorate implements Phone{
        private Phone p;
        
        public PhoneDecorate(Phone p){
            this.p=p;
        }
        @Override
        public void call() {
            this.p.call();
        }
    }
    package com.decorate;
    
    public class MusicPhoneDecorate extends PhoneDecorate {
    
        public MusicPhoneDecorate(Phone p) {
            super(p);
        }
        @Override
        public void call() {
            super.call();
            System.out.println("手机可以听音乐");
        }
    
    }
    package com.decorate;
    
    public class RingPhoneDecorate extends PhoneDecorate {
    
        public RingPhoneDecorate(Phone p) {
            super(p);
        }
        
        @Override
        public void call() {
            System.out.println("手机可以听彩铃");
            super.call();
        }
    
    }
    package com.decorate;
    
    public class PhoneDemo {
        public static void main(String[] args) {
            Iphone iphone=new Iphone();
            iphone.call();
            System.out.println("---");
            //接电话前听彩铃
            PhoneDecorate pd=new RingPhoneDecorate(iphone);
            pd.call();
            System.out.println();
            //接电话后听音乐
            pd=new MusicPhoneDecorate(iphone);
            pd.call();
            System.out.println("-----");
            //手机在接听前听彩铃,接听后听音乐
            pd=new MusicPhoneDecorate(new RingPhoneDecorate(iphone));
            pd.call();
        }
    }
  • 相关阅读:
    Openstack Swift 原理、架构与 API 介绍
    ReentrantLock 以及 AQS 实现原理
    AtomicInteger源码分析——基于CAS的乐观锁实
    深入浅出ThreadLocal
    Spring IOC的理解
    tomcat8 注册成服务后接sql数据失败
    Video.js 截图 Failed to execute 'drawImage' on 'CanvasRenderingContext2D'
    H5 播放Hls
    Video.js 源码浅析
    Hls流播放延时
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5609213.html
Copyright © 2011-2022 走看看