Java设计模式(六)装饰器模式-与代理模式的区别-项目实战应用

什么是装饰器模式

装饰器模式(Decorator Pattern): 在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责;

感觉有点儿类似于继承,不改变父类,子类可拓展功能;

优点
  1. 装饰类和被装饰类可以独立发展,不会相互耦合
  2. 相比于继承,更加的轻便、灵活
  3. 可以动态扩展一个实现类的功能,不必修改原本代码
缺点
  1. 会产生很多的装饰类,增加了系统的复杂性。
  2. 这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。
使用场景
  1. 对已有的目标功能存在不足,需要增强时,扩展类的功能。
  2. 动态增加功能,动态撤销
装饰器模式和代理模式的区别
  • 代理是全权代理,目标根本不对外,全部由代理类来完成;装饰是增强,是辅助,目标仍然可以自行对外提供服务,装饰器只起增强作用。
  • 装饰器模式强调的是:增强、新增行为;代理模式强调的是:对代理的对象施加控制,但不对对象本身的功能进行增强
  • 装饰器模式:生效的对象还是原本的对象;代理模式:生效的是新的对象(代理对象)

装饰器和代理 区别

装饰器的简单实现

场景:天气太热了,喝点儿冰水解解暑;加点儿柠檬片,让果汁好喝点儿

先定义一个喝水的接口

public interface Drink {
    /**
     * 喝水
     */
    void drink();
}

写一个接口的实现

public class DrinkWater implements Drink {

    @Override
    public void drink() {
        System.out.println("喝水");
    }

}

一个简单的装饰器

public class DrinkDecorator implements Drink {

    private final Drink drink;

    public DrinkDecorator(Drink drink) {
        this.drink = drink;
    }

    @Override
    public void drink() {
        System.out.println("先加点儿柠檬片");
        drink.drink();
    }

}

开始测试

public class DrinkMain {
    public static void main(String[] args) {
        Drink drink = new DrinkWater();
        drink = new DrinkDecorator(drink);
        drink.drink();
    }
}

运行结果

先加点儿柠檬片
喝水

一个简单的装饰器模式例子就写完了

看起来和代理模式(代理设计模式) 真是太像了,简直一摸一样

装饰器模式实战

场景: 项目一期开发的时候,并没有给鉴权部分设置缓存;二期开发考虑到性能问题,想要给鉴权部分加上缓存,这里就选择了使用装饰器模式进行处理;

ps: 小白一枚,第一次见到这个操作;感觉很新奇,了解一下装饰器模式,这篇文章就出来了

这里使用的缓存是spring的 spring-cache,不了解没关系,知道几个注解什么意思就行

@Cacheable 表示要对方法返回值进行缓存

@CacheEvict 删除缓存注解

为了简洁,以下代码均为伪代码

首先,需要一个权限的接口和实现类

public interface IDataAccessor {
    /**
     * 根据部门上级 id 获取所有子集部门
     */
    Set<Long> deptFindAllChildrenByParentIds(Collection<Long> parentIds);

    /**
     * 获取数据范围内的部门
     */
    Set<Long> deptFindScopeById(Long userId);

实现类(注意这里加了@Service, 交给spring处理)

@Service
public class ScopeDataAccessorImpl implements IDataAccessor {
    @Autowired
    private IDepartmentService departmentService;
    
    @Autowired
    private INodeScopeService nodeScopeService;

    @Override
    public Set<Long> deptFindAllChildrenByParentIds(Collection<Long> parentIds) {
        Set<Long> result = new HashSet<>();
        departmentService.departmentChildren(parentIds, result);
        return result;
    }
    
    @Override
    public Set<Long> deptFindScopeById(Long userId) {
        return nodeScopeService.deptFindScopeById(userId);
    }
}

接下来就是对之前的代码进行装饰,定义一个装饰器的实现类

(这个类没有 @Component, 没有直接交给spring管理;加了注解会报错:找到了2个bean)

public class DataAccessorDecorator implements IDataAccessor {
    private final IDataAccessor iDataAccessor;

    public DataAccessorDecorator(IDataAccessor iDataAccessor) {
        this.iDataAccessor = iDataAccessor;
    }

    @Cacheable(cacheNames = "dept:parentId", key = "#p0", sync = true)
    @Override
    public Set<Long> deptFindAllChildrenByParentIds(Collection<Long> parentIds) {
        return iDataAccessor.deptFindAllChildrenByParentIds(parentIds);
    }

    @Cacheable(cacheNames = "dept:scope:userId", key = "#p0", sync = true)
    @Override
    public Set<Long> deptFindScopeById(Long userId) {
        return iDataAccessor.deptFindScopeById(nodeId,userId);
    }
}

接下来还需要将这个装饰器的类注册到spring中

@Configuration
@ConditionalOnBean({IDataAccessor.class})
public class Config {
    
    @Bean
    @ConditionalOnBean({IDataAccessor.class})
    public DataAccessorDecorator dataAccessorDecorator(IDataAccessor iDataAccessor) {
        return new DataAccessorDecorator(iDataAccessor);
    }
}

使用的时候直接使用装饰器类就好了

@Service
public class UserService {
    
    @Autowired
    DataAccessorDecorator scopeDataAccessor;

    
    public Set<Long> deptFindAllChildrenByParentIds(Collection<Long> parentIds) {
        return scopeDataAccessor.deptFindAllChildrenByParentIds(parentIds);
    }
    
    
    public Set<Long> deptFindScopeById(Long userId) {
        return scopeDataAccessor.deptFindScopeById(userId);
    }
    
}

根据业务,维护缓存更新即可;这里使用的监听部门和员工的变更事件

@Component
public class DataScopeEvict {

    /**
     * 清空部门相关缓存
     */
    @CacheEvict(cacheNames = {"dept:parentId"}, allEntries = true)
    public void department() {
    }

    /**
     * 清空用户相关缓存
     */
    @CacheEvict(cacheNames = {"dept:scope:userId"}, allEntries = true)
    public void user() {
    }
}
@Component
public class ScopeDataEventListener {
    @Autowired
    private DataScopeEvict evict;
    
	/**
     * 监听部门变更事件
     */
    @EventListener
    public void departmentEvent(DepartmentChangeEvent event) {
        // 1 增加 2 删除 3 上级部门变更
        evict.department();
    }

    /**
     * 监听user变更事件
     */
    @EventListener
    public void userEvent(UserChangeEvent event) {
        // 2 删除 3 主部门变更
        if (event.getType().equals(2) || event.getType().equals(3)) {
            evict.user();
        }
    }
}

以上就是一个将装饰器模式应用到实际项目的例子;

小结

在这个例子中,使用装饰器模式增强了原本的代码,不修改之前的代码,之前的代码也能正确提供服务,只不过不修改的话,就无法使用缓存;只要方法名一样,只需修改注入的字段就可以升级完成,还是很方便的

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
Java设计模式综合项目实战可以是一个关于图书管理系统的项目。 项目的目标是设计和开发一个图书管理系统,以实现对图书馆中图书的管理、借阅和归还等功能。为了使系统具备良好的可维护性和可扩展性,我们将使用设计模式来优化项目的结构和代码。 在这个项目中,我们可以使用以下设计模式: 1. 单例模式:用于确保系统中只存在一个图书管理系统实例,以防止多个实例导致数据不一致或冲突的问题。 2. 工厂模式:用于创建不同类型的图书对象,如小说、故事书等,通过工厂方法根据具体需求创建对象,避免直接实例化造成代码的紧耦合。 3. 观察者模式:用于实现图书归还通知,当图书被借阅后,借书人归还时,系统会通知借书人图书已归还。 4. 建造者模式:用于创建图书馆员对象,可以根据不同的权限和职责,灵活地构建图书馆员对象。 5. 策略模式:用于定义不同的计费策略,如按天计费、按次计费等,通过使用策略模式,可以轻松地切换不同的计费策略。 6. 适配器模式:用于实现与第三方支付接口的对接,使系统能够方便地集成不同的支付方式。 7. 模板方法模式:用于定义图书馆管理系统的框架,如定义借阅图书、归还图书的流程骨架,具体的实现由子类实现。 通过使用这些设计模式,可以使图书管理系统的代码结构清晰、可扩展、易于维护。除此之外,还可以提高代码的重用性和灵活性,使项目开发更加高效并且易于理解和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值