JAVA基础——设计模式之装饰者模式
Posted huan欢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } }
5.并发和并行
并发:多个线程 更具CPU的调度情况 执行
并行:多个线程 同时执行
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 ---------------------
以上是关于JAVA基础——设计模式之装饰者模式的主要内容,如果未能解决你的问题,请参考以下文章