设计模式_Tag标签_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
当前位置:程序员俱乐部 >>Tag标签 >> 设计模式 >>列表
简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍第二种工厂模式——工厂方法模式。1日志记录器的设计Sunny软件公司欲开发一个系统运行日志记录器(Logger),该记录器可以通过多种途径保存系统的运行日志,如通过文件记录或数据库记录,用户可以通过修改配置文件灵活地更换日志记录方式。在设计各类日志记录器时... 查看全文
组合模式:允许将对象组合成树形结构来表现“整体/部分”的结构,让用户可以用一致的方式处理个别对象以及组合对象。publicabstractclassNode{protectedStringname;protectedStringdesc;publicNode(Stringdesc,Stringname){this.name=name;this.desc=desc;}publicvoidaddChild(Nodenode)... 查看全文
状态模式:允许对象在内部状态改变的时候改变它的行为。例如:我们在12306上买票,行为是卖票,状态有两个,有余票则出票成功,余票不足就出票失败。publicclassStation{publicStatestate;privateinttickets=0;publicStation(inttickets){this.tickets=tickets;if(tickets>0){state=newHasTicketState(this);}}publicvoidsoldTickets()... 查看全文
· 常用设计模式学习-单例模式发布时间:2017-03-31
个人理解:在代码运行期间使用单例模式实现的部分有且只有一个实例存在。应用场景:一般配置文件读取,日志记录,还有部分数据库访问连接池等都可以设计成单例模式。几种实现方式:这里以读取配置文件为例一个配置文件对象:publicclassCustomConfig{publicstringEmailUserName{get;set;}//邮箱账号publicstringEmailContentModel{get;set;}//邮箱内容模板publicstringEmailPassword{get;set... 查看全文
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口或者一个很大的接口,总之外观模式的目的是简化并统一其他的接口。与适配器不同的是,它不会修改其他的接口,只是将客户从一个复杂的子系统中解耦出来。publicclassAirconditioner{inttempture;publicvoidturnOn(){System.out.println("开空调");}publicvoidturnOff(){System.out.println("关掉空调");... 查看全文
模板方法模式:在一个方法中定义了一个算法的骨架,而将实现延迟到子类中。模板方法使得子类在不改变算法结构的同时提供自己的特定实现。publicabstractclassTemplet{publicvoidprepareDinner(){buyGroceries();washgroceries();choppingVegetables();cook();}abstractvoidbuyGroceries();publicvoidwashgroceries(){System.out.println... 查看全文
适配器模式:将一个类的接口装换成另一个客户期望的接口,让原本两个不同的类使用起来像是一个类。分为类的适配器和对象的适配器。对象的适配器:使用组合的方式达到适配的效果。publicinterfaceTarget{publicvoidrun();}publicclassDogimplementsTarget{@Overridepublicvoidrun(){System.out.println("狗狗在地上跑");}}publicclassFish{publicvoidswim(){System... 查看全文
命令模式:允许将发出请求的对象和接受并执行这些请求的对象分割开来,即实现请求调用者和请求接受者之间的解耦。定义:将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。调用命令的是Invoker,执行命令的实际上是Receiver。通过命令模式,将各种动作封装成Command,实现了Invoker和Receiver的彻底解耦。Invoker只管发出命令,Receiver只管执行相应的操作。publicinterfaceCommand{publicvoidexecute();... 查看全文
单例模式:确保一个类只有一个实例,并提供一个全局访问点。通常被用来管理公共资源。例如,数据库连接池或是线程池。publicclassSingleton{privatestaticSingletoninstance;privateSingleton(){System.out.println("ThereisonlyonSingleton");}publicstaticSingletongetInstance(){if(instance==null){instance=newSingleton()... 查看全文
1.问题的引入:有时候我们需要动态地扩展对象的功能。比如现在给快餐店编写一菜单程序。主食和菜品可以互相搭配,我们要怎么确立餐厅需要的各种菜单类呢?首先我们尝试下类的继承能不能解决问题:主食和菜是两个接口,任何一个菜单里面都应该搭配主食和菜,那我们就把所有的搭配都定义成类。菜单是一个实现了这两个接口的超类,任何一种特定的主食+菜式搭配都可以定义一个新类,继承菜单这个超类就可以了。这样写肯定是会被老大骂的,主食和菜式特别多的时候,类的数量级也特别大。维护量太大。三种主食,20种菜的话就是六十个类... 查看全文
1.实际问题还是拿传统的订报纸业务举例吧。虽然现在看报纸的人越来越少了。现在要我们给报社做一个用,只要用户订阅了报纸,一旦有新的报纸出来了就要送给客户。用户退订了就不用送了。老师叫我们面向对象编程,那么这个问题的对象有哪些呢?报社:新的报纸可以当作是它的一个状态,一旦报纸有更新,就要推给用户。用户:用户是另外一个对象。并且很明显,它依赖报社报纸的更新。只有报社里面有新的报纸它才能收到。这个问题还有什么特殊的地方吗?对了,报社只有一个,但是用户可能有多个。这是一个典型的一对多的关系... 查看全文
1.引出策略模式:Joe上班的公司设计了一款模拟鸭子各种行为的游戏,游戏当中出现了各种各样的鸭子。鸭子有很多行为,例如:在屏幕上显示、叫、游泳等。因为有很多种类型的鸭子,最开始大部分行为差不多,当然显示肯定是不一样的。所以我们很自然的想到了用继承解决问题,我们可以定义一个鸭子的父类。每种类型的鸭子都继承它就可以了。这样可以很好的复用代码,一段时间内也确实是可行的。可是我们的老大和用户就是如此的任性,有一天他们突发奇想说要会飞的鸭子。呜呜~~你们怎么不去上天啊....... 查看全文
前言在【Java设计模式】系列中,LZ写了十几篇关于设计模式的文章,大致是关于每种设计模式的作用、写法、优缺点、应用场景。随着LZ自身的成长,再加上在工作中会从事一定的架构以及底层代码设计的原因,在近半年的实践中,对于设计模式的理解又有了新的认识,因此有了此文,目的是和网友朋友们分享自己对于设计模式的一些思考。LZ本人水平有限,抛砖引玉,写得不对的地方希望网友朋友们指正,也可留言相互讨论。简单工厂模式首先是简单工厂模式。对于简单工厂模式的作用描述,LZ当时是这么写的:原因很简单:解耦... 查看全文
· 设计模式速记发布时间:2017-02-05
创建型模式静态工厂模式(FactoryPattern)静态方法返回实例抽象工厂模式(AbstractFactoryPattern)接口方式返回实例建造者模式(BuilderPattern)每次返回多个实例单例模式(SingletonPattern)类只有一个实例原型模式(PrototypePattern)实现ICloneable接口结构型模式适配器模式(AdapterPattern)不想实现每个接口桥接模式(BridgePattern)给桥设置某个实例,用桥调用实例方法过滤器模式(Filter... 查看全文
· Java之设计模式之Singleton发布时间:2017-01-09
Java之设计模式之SingletonJavaSingleton单例设计模式属于四大设计模式之生产设计模式的一种。该设计模式看似简单,但是涉及到许多注意点。一、JavaSingleton简介JavaSingleton单例设计只允许在JVM中产生类的一个实例对象。因此这样的类不能提供对外的构造方法产生实例,而是提供一个public方法,返回(指向)某个实例的引用。JavaSingleton单例设计常用于:1、Logging(日志)2、Driver(驱动)3、Caching(缓存)4... 查看全文
一、借鉴说明1.《HeadFirstDesignPatterns》(中文名《深入浅出设计模式》)2.维基百科,观察者模式,https://zh.wikipedia.org/wiki/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F3.MSDN,event(C#参考),https://msdn.microsoft.com/zh-cn/library/8627sbea.aspx二、观察者模式基础知识提供一个被观察者(数据库、通知中心等)... 查看全文
· JAVA设计模式(三)工厂模式发布时间:2016-10-28
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。interfaceFlowratePackageFactory{intgetFlowrate();intgetPrice();}/***工厂方法模式、抽象工厂模式*/publicclassFactoryTest{publicstaticvoidmain(String[]args){Providerprovider... 查看全文
· JAVA设计模式(一)观察者模式发布时间:2016-10-19
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。importjava.util.Observable;importjava.util.Observer;publicclassObserverTest{publicstaticvoidmain(String[]args){Schoolschool=newSchool();Studentstudent=newStudent(school);Teacherteacher=newTeacher... 查看全文
· JAVA设计模式(二)装饰者模式发布时间:2016-10-19
装饰者模式动态地将责任附加到对象上。如要扩展功能,装饰者提供了比继承更有弹性的替代方案。publicclassDecoratorTest{publicstaticvoidmain(String[]args){Foodfood=newPorkRib();food=newVinegar(food);food=newSuger(food);System.out.println(food.getDesc());System.out.println(newSauerkraut(newFish())... 查看全文
druid是号称目前最好的java数据库连接池,温少写点代码中有很多设计模式的思想,其中最重要的一个就是filter-chain设计模式给druid所带来的可扩展性。对此,我很感兴趣,并希望日后借鉴,所以看了看他的源码,以此记录一下。druid中设计到filter-chain设计模式的类或接口主要有一下几个Filter、FilterAdapter、FilterChain、FilterChainImpl、FilterEventAdapter... 查看全文