zoukankan      html  css  js  c++  java
  • Java装饰者模式(思维导图)

    图1 装饰者模式【点击查看图片】

    1,一个简单的以人为主体的装饰者模式

    被装饰者

    public interface Human {//被装饰者
        public void wearClothes();
        public void walkToWhere();
    }
    
    //定义被装饰者,被装饰者初始状态有些自己的装饰
    class Person implements Human {
    
        @Override
        public void wearClothes() {
            // TODO Auto-generated method stub
            System.out.println("穿什么呢。。");
        }
    
        @Override
        public void walkToWhere() {
            // TODO Auto-generated method stub
            System.out.println("去哪里呢。。");
        }
    }

    装饰者

    public abstract class Decorator implements Human {//定义装饰者
        private Human human;
    
        public Decorator(Human human) {//有参构造
            this.human = human;
        }
    
        @Override
        public void wearClothes() {
            human.wearClothes();
        }
    
        @Override
        public void walkToWhere() {
            human.walkToWhere();
        }
    }
    
    
    class Decorator_zero extends Decorator {
    
        public Decorator_zero(Human human) {
            super(human);
        }
    
        public void goHome() {
            System.out.println("进房子。。");
        }
    
        public void findMap() {
            System.out.println("书房找找Map。。");
        }
    
        @Override
        public void wearClothes() {
            // TODO Auto-generated method stub
            super.wearClothes();
            goHome();
        }
    
        @Override
        public void walkToWhere() {
            // TODO Auto-generated method stub
            super.walkToWhere();
            findMap();
        }
    }
    
    
    class Decorator_first extends Decorator {
    
        public Decorator_first(Human human) {
            super(human);
        }
    
        public void goClothespress() {
            System.out.println("去衣柜找找看。。");
        }
    
        public void findPlaceOnMap() {
            System.out.println("在Map上找找。。");
        }
    
        @Override
        public void wearClothes() {
            // TODO Auto-generated method stub
            super.wearClothes();
            goClothespress();
        }
    
        @Override
        public void walkToWhere() {
            // TODO Auto-generated method stub
            super.walkToWhere();
            findPlaceOnMap();
        }
    }
    
    class Decorator_two extends Decorator {
    
        public Decorator_two(Human human) {
            super(human);
        }
    
        public void findClothes() {
            System.out.println("找到一件D&G。。");
        }
    
        public void findTheTarget() {
            System.out.println("在Map上找到神秘花园和城堡。。");
        }
    
        @Override
        public void wearClothes() {
            // TODO Auto-generated method stub
            super.wearClothes();
            findClothes();
        }
    
        @Override
        public void walkToWhere() {
            // TODO Auto-generated method stub
            super.walkToWhere();
            findTheTarget();
        }
    }

    测试验证

    public class Client {
        public static void main(String[] args) {
            Human person = new Person();
            Decorator decorator = new Decorator_two(new Decorator_first(new Decorator_zero(person)));
    
            decorator.wearClothes();
            decorator.walkToWhere();
        }
    }

    2,一个以汉堡添为主体的装饰者模式

    被装饰者

    public abstract class Humburger {//被装饰者,主体,被修补的物件
        protected  String name ;
        public String getName(){
            return name;
        }
        public abstract double getPrice();
    
    }
    
    class ChickenBurger extends Humburger {//被修饰者的原始状态
        public ChickenBurger(){
            name = "鸡腿堡";
        }
        @Override
        public double getPrice() {
            return 10;
        }
    }

    装饰者

    public abstract class Condiment extends Humburger {//装饰者【修修补补的材料】
        public abstract String getName();
    }
    
    class Lettuce extends Condiment {
        Humburger humburger;
        public Lettuce(Humburger humburger){
            this.humburger = humburger;
        }
        @Override
        public String getName() {
            return humburger.getName()+" 加生菜";
        }
        @Override
        public double getPrice() {
            return humburger.getPrice()+1.5;
        }
    }
    
    
    class Chilli extends Condiment {
        Humburger humburger;
        public Chilli(Humburger humburger){
            this.humburger = humburger;
        }
        @Override
        public String getName() {
            return humburger.getName()+" 加辣椒";
        }
        @Override
        public double getPrice() {
            return humburger.getPrice();  //辣椒是免费的哦
        }
    
    }

    测试验证

    public class Client {
        public static void main(String[] args) {
            Humburger humburger = new ChickenBurger();//鸡腿堡  价钱:10.0
            System.out.println(humburger.getName()+"  价钱:"+humburger.getPrice());
    
            Lettuce lettuce = new Lettuce(humburger);//鸡腿堡 加生菜  价钱:11.5
            System.out.println(lettuce.getName()+"  价钱:"+lettuce.getPrice());
    
            Chilli chilli = new Chilli(humburger);//鸡腿堡 加辣椒  价钱:10.0
            System.out.println(chilli.getName()+"  价钱:"+chilli.getPrice());
    
            Chilli chilli2 = new Chilli(lettuce);//鸡腿堡 加生菜 加辣椒  价钱:11.5
            System.out.println(chilli2.getName()+"  价钱:"+chilli2.getPrice());
        }
    
    }

    参考:https://blog.csdn.net/jason0539/article/details/22713711

  • 相关阅读:
    docker 常用
    vue-cli 的静态资源
    ubuntu 恢复模式
    virtualbox
    cmake 使用技巧
    VLC播放pcm
    Ice-Lite 理解
    webrtc ice流程
    Mediasoup_Demo信令过程, client and server
    Mediasoup
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11388878.html
Copyright © 2011-2022 走看看