大家好,又见面了,我是全栈君。
装饰模式
动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的取代方案
代码
package gx.component;
/** * 组件:装饰类和被装饰类 都要继承:为了类型保持一致 * @author always * */
public abstract class Component {
public abstract void description();
public abstract int cost();
}
package gx.component.impl;
import gx.component.Component;
/** * 装饰类的抽象类 * @author always * */
public abstract class Decorator extends Component{
protected Component component;
}
package gx.component.impl;
import gx.component.Component;
/** * * 被包装的类 * @author always * */
public class Phone extends Component{
public void description() {
System.out.println("裸机");
}
public int cost() {
return 1900;
}
}
package gx.decorator.impl;
import gx.component.Component;
import gx.component.impl.Decorator;
/** * * 装饰1:给手机买个壳 * @author always * */
public class DaiKe extends Decorator{
public DaiKe(){
}
public DaiKe(Component component){
this.component=component;
}
public void description() {
this.component.description();
System.out.println("带了手机壳");
}
public int cost() {
return 50+this.component.cost();
}
}
package gx.decorator.impl;
import gx.component.Component;
import gx.component.impl.Decorator;
/** * * 装饰2:给手机贴个膜 * @author always * */
public class TieMo extends Decorator{
public TieMo(){}
public TieMo(Component component){
this.component=component;
}
public void description() {
this.component.description();
System.out.println("贴了膜");
}
public int cost() {
return 20+this.component.cost();
}
}
測试类:
package gx;
import gx.component.Component;
import gx.component.impl.Phone;
import gx.decorator.impl.DaiKe;
import gx.decorator.impl.TieMo;
import junit.framework.TestCase;
public class TestDecorator extends TestCase {
public void testDecorator() {
Component component = new TieMo(new DaiKe(new Phone()));
component.description();
System.out.println("价钱:" + component.cost());
/* * 结果: * 裸机 * 带了手机壳 * 贴了膜 * 价钱:1970 */
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115420.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...