java设计模式_装饰模式
来源:互联网 发布:手机网络挣钱 编辑:程序博客网 时间:2024/05/11 00:28
一、什么是装饰模式
装饰( Decorator )模式又叫做包装模式。通 过一种对客户端透明的方式来扩展对象的功能, 是继承关系的一个替换方案。
二、装饰模式的结构
三、装饰模式的角色和职责
抽象组件角色: 一个抽象接口,是被装饰类和 装饰类的父接口。 具体组件角色:为抽象组件的实现类。 抽象装饰角色:包含一个组件的引用,并定义了
与抽象组件一致的接口。 具体装饰角色:为抽象装饰角色的实现类。负责 具体的装饰。
//示例1:public class Car { //跑 public void run() { System.out.println("可以跑"); } //飞 public void fly() { System.out.println("可以飞"); } //游 public void swim() { System.out.println("可以游"); } public void show() { System.out.println("拥有的功能"); this.run(); this.fly(); this.swim(); }}public class MainClass { public static void main(String[] args) { Car bus = new Car(); bus.show(); }}//拥有的功能//可以跑//可以飞//可以游//*上例中显然是车未来全部的功能,不可能每一辆车都拥有这些功能,所以需进一步优化//示例2:public interface Car { public void show(); public void run();}public class RunCar implements Car{ //跑 public void run() { System.out.println("可以跑"); } public void show() { this.run(); }}public class FlyCar implements Car{ //跑 public void run() { System.out.println("可以跑"); } //飞 public void fly() { System.out.println("可以飞"); } public void show() { this.run(); this.fly(); }}public class SwimCar implements Car{ //跑 public void run() { System.out.println("可以跑"); } //游 public void swim() { System.out.println("可以游"); } public void show() { this.run(); this.swim(); }}public class MainClass { public static void main(String[] args) { Car flyCar = new FlyCar(); flyCar.show(); }}//可以跑//可以飞//示例3:进一步优化public interface Car { public void show(); public void run();}public class RunCar implements Car{ //跑 public void run() { System.out.println("可以跑"); } public void show() { this.run(); }}public abstract class CarDecorator { protected Car car; public CarDecorator(Car car) { this.car = car; } public abstract void show();}public class FlyCarDecorator extends CarDecorator{ public FlyCarDecorator(Car car) { super(car); } //飞 public void fly() { System.out.println("可以飞"); } public void show() { car.run(); this.fly(); }}public class SwimCarDecorator extends CarDecorator{ public SwimCarDecorator(Car car) { super(car); } //游 public void swim() { System.out.println("可以游"); } public void show() { car.run(); this.swim(); }}public class MainClass { public static void main(String[] args) { Car flyCar = new RunCar();// CarDecorator carDecorator = new FlyCarDecorator(flyCar); CarDecorator carDecorator = new SwimCarDecorator(flyCar); carDecorator.show(); }}//######FlyCarDecorator#########//可以跑//可以飞//######SwimCarDecorator#########//可以跑//可以游//示例4:再优化public interface Car { public void show(); public void run();}public class RunCar implements Car{ //跑 public void run() { System.out.println("可以跑"); } public void show() { this.run(); }}public abstract class CarDecorator implements Car{ protected Car car; public CarDecorator(Car car) { this.car = car; } public abstract void show();}public class FlyCarDecorator extends CarDecorator{ public FlyCarDecorator(Car car) { super(car); } //飞 public void fly() { System.out.println("可以飞"); } //跑 @Override public void run() { car.run(); } public void show() { car.show(); this.fly(); }}public class SwimCarDecorator extends CarDecorator{ public SwimCarDecorator(Car car) { super(car); } //游 public void swim() { System.out.println("可以游"); } @Override public void run() { car.run(); } public void show() { car.show(); this.swim(); }}public class MainClass { public static void main(String[] args) { Car car = new RunCar(); CarDecorator swimCar = new SwimCarDecorator(car); CarDecorator flySwimCar = new FlyCarDecorator(swimCar); flySwimCar.show(); }}//可以跑//可以游//可以飞
0 0
- java设计模式_装饰模式
- java设计模式11_装饰模式
- Java 设计模式_装饰器模式
- 设计模式_装饰模式
- Java设计模式_(结构型)_装饰模式
- java基础_设计模式_装饰者模式
- 设计模式_装饰设计模式
- 30_装饰设计模式
- Java装饰设计模式
- Java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java装饰设计模式
- Java 装饰设计模式
- Java装饰设计模式
- Java 设计模式 --装饰模式
- 如何使用Gson工具类,以及使用listview加载相应的解析项
- WebDriver之 RemoteWebDriver
- java对Redis基本操作
- 从苏宁电器到卡巴斯基第19篇:曲折考研路(下)
- 工作问题
- java设计模式_装饰模式
- 77.You executed the following command to perform a backup of the USERS tablespace: SQL> ALTER TABLES
- c# datetimepicker中format设置
- 深入理解JVM
- hdu1527 取石子游戏 【威佐夫博弈】
- 数据结构学习笔记之用Java实现双向链表
- linux携带密码登录其他远程机
- Apache 服务器下载、安装、应用
- Java 8: Lambda Expression