zoukankan      html  css  js  c++  java
  • 装饰模式

    装饰模式可以给我们很好的帮助,通过装饰模式重新封装一个类,而不是通过继承来完成,
    简单点说,三个继承关系 Father,Son,GrandSon 三个类,我要再 Son 类上增强一些功能怎么办?
    我想你会坚决的顶回去!不允许,对了,为什么呢?你增强的功能是修改 Son 类中的方法吗?增加方法吗 ?
    对 GrandSon 的影响哪?特别是 GrandSon 有多个的情况,你怎么办?这个评估的工作量就是够你受的,所以这个是不允许的,那还是要解决问题的呀,怎么办?
    通过建立 SonDecorator 类来修饰 Son,等于说是创建了一个新的类,这个对原有程序没有变更,通过扩充很好的完成了这次变更。

    以煮咖啡为例:

    public abstract class Cafe
    {
    	public abstract void Cook(); //煮咖啡
    }
    
    //摩卡咖啡
    public class MochaCafe extends Cafe
    {
    	public void Cook() {
    	//煮摩卡咖啡
    	}
    }
    
    //猫屎咖啡
    public class CivetCoffee extends Cafe
    {
    	public void Cook() {
    	//煮猫屎咖啡
    	}
    }
    
    //带牛奶的摩卡咖啡
    public class MilkMochaCafe extends MochaCafe
    {
    	public void AddMilk()
    	{
    		//加一些牛奶
    	}
    
    	public void Cook() {
    		//煮猫屎咖啡
    		super.Cook();
    		//煮完以后 再加牛奶
    		AddMilk();
    	}
    }
    
    //带糖的猫屎咖啡
    public class SugarCivetCoffee extends MochaCafe
    {
    	public void AddSugar()
    	{
    		//加一些糖
    	}
    	public void Cook() {
    		//煮猫屎咖啡
    		super.Cook();
    		//煮完以后 再加一些糖
    		AddSugar();
    	}
    }
    

    咖啡的种类越来越多,配料的除了糖和牛奶 还 增加了蜂蜜等,继承关系变得越来越多。
    继承关系越多系统架构越复杂,维护成本就会变高。
    装饰者,通过组合方式来扩展功能,而非继承的方式。
    我们来看下如何处理:

    //摩卡咖啡装饰者
    public class CafeDecorator extends MochaCafe
    {
    	private MochaCafe mochaCafe;
    
    	public CafeDecorator(MochaCafe mochaCafe) {
    		this.mochaCafe = mochaCafe;
    	}
    
    	public void AddSugar()
    	{
    		//加一些糖
    	}
    
    	public void AddMilk()
    	{
    		//加牛奶
    	}
    
    	public void Cook()
    	{
    		super.Cook();
    		AddSugar(); //煮咖啡之后加点糖
    		AddMilk(); //煮咖啡之后加牛奶
    	}
    }
  • 相关阅读:
    AWS的EC2实例搭建服务器使用stackoverflow教程
    亚马逊云开服之旅
    Linux主机之间ssh免密登录配置方法
    阿里云运维培训讲解
    区块链技术在物流领域应用分析
    公众号页面分享朋友圈后点击跳转到小程序的方法介绍
    数据库主库从库宕机重启后binlog数据同步
    Docker+ElasticSearch+Logstash+Kibana+Filebeat搭建方法
    linux实现磁盘自动挂载脚本
    阿里云ecs基于镜像进行旧服务器迁移到新服务器
  • 原文地址:https://www.cnblogs.com/zhuojun/p/5817695.html
Copyright © 2011-2022 走看看