• JAVA设计模式之【装饰者模式】


    JAVA设计模式之【装饰者模式】

    
    装饰模式
    
    	对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮、更温馨、更实用。
    	在软件设计中,对已有对象(新房)的功能进行扩展(装修)。
    	把通用功能封装在装饰器中,用到的地方进行调用。
    	装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系。引入装饰类,扩充新功能。
    	角色
    		抽象构件
    		具体构件
    		抽象装饰类
    		具体装饰类
    
    

    案例一,窗体装饰

    1.组件类

    package Decorator; // 装饰者模式
    
    /**
     * Created by Jiqing on 2016/10/13.
     */
    abstract class Component {
        public abstract void display();
    }
    

    2.组件装饰者

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/13.
     */
    public class ComponentDecorator extends Component{
        private Component component; // 维持对抽象构件类型对象的引用
        public ComponentDecorator(Component component){
            this.component = component;
        }
    
        public void display() {
            component.display();
        }
    
    }
    

    3.继承类ListBox

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/13.
     */
    public class ListBox extends Component{
        public void display() {
            System.out.println("显示列表框!");
        }
    }
    
    

    4.继承类TextBox

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/13.
     */
    public class TextBox extends Component{
        public void display() {
            System.out.println("显示文本框!");
        }
    }
    
    

    5.继承类Window

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/13.
     */
    public class Window extends Component{
        public void display() {
            System.out.println("显示窗体!");
        }
    }
    
    

    6.黑框装饰者

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class BlackBoarderDecorator extends ComponentDecorator{
        public BlackBoarderDecorator(Component component) {
            super(component);
        }
    
        public void display() {
            this.setBlackBoarder();
            super.display();
        }
    
        public void setBlackBoarder() {
            System.out.println("为构件增加黑色边框!");
    
        }
    }
    
    

    7.滚动条装饰者

    package Decorator;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class ScrollBarDecorator extends ComponentDecorator{
        public ScrollBarDecorator (Component component) {
            super(component); // 调用父类构造函数
        }
    
        public void display() {
            this.setScrollBar();
            super.display();
        }
    
        public void setScrollBar() {
            System.out.println("为构件增加滚动条!");
        }
    }
    
    

    8.客户端调用

    package Decorator; // 装饰者模式
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class Client {
        public static void main(String args[]) {
            Component component,componentSB,componentBB;
            component = new Window();
            componentSB = new ScrollBarDecorator(component);
            componentSB.display();
            System.out.println("--------------------");
            componentBB = new BlackBoarderDecorator(componentSB);
            componentBB.display();
        }
    }
    
    

    执行结果

    为构件增加滚动条!
    显示窗体!
    --------------------
    为构件增加黑色边框!
    为构件增加滚动条!
    显示窗体!
    

    案例二,密文装饰

    1.密文接口

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public interface Cipher // 密文接口
    {
        public String encrypt(String plainText);
    }
    
    

    2.密文装饰者

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class CipherDecorator implements Cipher{
        private Cipher cipher;
        public CipherDecorator(Cipher cipher) {
            this.cipher = cipher;
        }
    
        public String encrypt(String plainText) {
            return cipher.encrypt(plainText);
        }
    }
    
    

    3.密文接口实现类

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public final class SimpleCipher implements Cipher // 简单密文继承密文
    {
        public String encrypt(String plainText)
        {
            String str="";
            for(int i=0;i<plainText.length();i++)
            {
                char c=plainText.charAt(i);
                if(c>='a'&&c<='z')
                {
                    c+=6;
                    if(c>'z') c-=26;
                    if(c<'a') c+=26;
                }
                if(c>='A'&&c<='Z')
                {
                    c+=6;
                    if(c>'Z') c-=26;
                    if(c<'A') c+=26;
                }
                str+=c;
            }
            return str;
        }
    }
    
    

    4.复杂加密装饰者

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class ComplexCipher extends CipherDecorator // 复杂密文
    {
        public ComplexCipher(Cipher cipher)
        {
            super(cipher);
        }
    
        public String encrypt(String plainText)
        {
            String result=super.encrypt(plainText);
            result= this.reverse(result);
            return result;
        }
    
        public String reverse(String text)
        {
            String str="";
            for(int i=text.length();i>0;i--)
            {
                str+=text.substring(i-1,i);
            }
            return str;
        }
    }
    
    

    5.先进加密装饰者

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class AdvancedCipher extends CipherDecorator{
        public AdvancedCipher(Cipher cipher) {
            super(cipher);
        }
    
        public String encrypt(String plainText) { // 加密处理
            String result=super.encrypt(plainText);
            result=mod(result);
            return result;
        }
    
        public String mod(String text)
        {
            String str="";
            for(int i=0;i<text.length();i++)
            {
                String c=String.valueOf(text.charAt(i)%6);
                str+=c;
            }
            return str;
        }
    }
    
    

    6.客户端

    package Decorator.sample2;
    
    /**
     * Created by Jiqing on 2016/10/14.
     */
    public class Client {
        public static void main(String args[])
        {
            String password="Jiqing9006";  //明文
            String cpassword;       //密文
            Cipher sc,ac,cc;
    
            sc=new SimpleCipher();
            cpassword=sc.encrypt(password);
            System.out.println(cpassword);
            System.out.println("---------------------");
    
            cc=new ComplexCipher(sc);
            cpassword=cc.encrypt(password);
            System.out.println(cpassword);
            System.out.println("---------------------");
    
            ac=new AdvancedCipher(cc);
            cpassword=ac.encrypt(password);
            System.out.println(cpassword);
            System.out.println("---------------------");
        }
    }
    
    

    执行结果

    Powotm9006
    ---------------------
    6009mtowoP
    ---------------------
    0003123532
    ---------------------
    

  • 相关阅读:
    Centos-706防火墙端口操作
    Centos-7.6安装DotnetCore3.1
    Centos-610-源码安装GIT
    Centos-610-安装Jenkins2.222.4
    Centos610-安装NodeJs
    Windows:开发环境Word,PPT,EXCEL com+组件配置
    DCom配置我的电脑有个红色向下的箭头
    NPM包管理工具NRM
    Win10-Jvm调优之工具基本配置、使用(二)
    Win10-Jvm调优之工具基本配置、使用(一)
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5962431.html
Copyright © 2020-2023  润新知