首页 > 代码库 > 装饰设计模式
装饰设计模式
装饰设计模式
装饰设计模式概述
装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类,是继承的替代方案
优点
使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能
缺点
正因为可以随意组合,所以就可能出现一些不合理的逻辑
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); } }
装饰设计模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。