装饰设计模式
- 去4s店 买个车 宝马x5 买房 毛坯房 手机(诺基亚) 打电话.
- 装饰设计模式概述
- 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案
- 优点
- 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能
- 缺点
- 正因为可以随意组合,所以就可能出现一些不合理的逻辑
- 代码实现过程
- 定义一个接口 接口里面有个一个打电话功能
public interface Phone {public void call(); }
-
- 向上抽取了一个基本的装饰类 基本的装饰类要保证有通话功能
public abstract class BasicFunction implements Phone {private Phone p;public BasicFunction(Phone p) {this.p = p;}@Overridepublic void call() {p.call();} }
-
- 在定义具体的装饰类 比如 播放音乐 加彩铃
public class MusicFunction extends BasicFunction {public MusicFunction(Phone p) {super(p);}@Overridepublic void call() {// TODO Auto-generated method stubsuper.call();System.out.println("手机可以听歌了!!!!!!!!!");} }
-
- 定义一个测试类就可以了
public class Test {public static void main(String[] args) {Iphone p = new Iphone();MusicFunction p2 = new MusicFunction(p);p2.call(); // RingFunction p3 = new RingFunction(p); // p3.call(); } }