装饰者Decorator主要是针对继承树较为庞大的类所引起的代码重复问题,所提出的一种设计模式。例如:电子产品的子类有手机、电脑、平板电脑、路由器。。。。而每一个公司的子类也有手机、电脑、平板电脑、路由器。。。。如果按照继承关系就会形成庞大的继承子类。装饰者设计模式就是针对这个问题给出了解决方案。
interface Product{
public void productName();
}
//Phone和Desktop为被装饰者
class Phone implements Product{
public void productName(){
System.out.println("Phone -->make a phonecall");
}
}
class Desktop implements Product{
public void productName(){
System.out.println("Desktop -->document processing");
}
}
//HuaWei和Lenovo为装饰者
class HuaWei implements Product{
private Product product;
public HuaWei(Product product){
this.product = product;
}
public void productName(){
System.out.println("***HuaWei***");
product.productName();
}
}
class Lenovo implements Product{
private Product product;
public Lenovo(Product product){
this.product = product;
}
public void productName(){
System.out.println("***Lenovo***");
product.productName();
}
}
public class TestDemo{
public static void main(String args[]){
Phone phone = new Phone();
HuaWei huawei = new HuaWei(phone);
huawei.productName();
Lenovo lenovo = new Lenovo(phone);
lenovo.productName();
}
}
/*Output
***HuaWei***
Phone -->make a phonecall
***Lenovo***
Phone -->make a phonecall
*/