java装饰器模式
A. java中有多少种设计模式请简单画一下三种常见设计模式的类图
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:
B. JAVA23种设计模式
一、大约分为三类:
1、创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
二、设计模式遵循的原则有6个:
1、开闭原则(Open Close Principle)
对扩展开放,对修改关闭。
2、里氏代换原则(Liskov Substitution Principle)
只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
3、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
使用多个隔离的借口来降低耦合度。
5、迪米特法则(最少知道原则)(Demeter Principle)
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。
C. 学Java 具体都有哪些
想要学好Java,需要有正确的学习路线,有坚持不懈的学习毅力,也需要有专业老师的指导,这样才能学得更好。那么,学习Java需要掌握哪些知识和技能呢?这里简单列举一些。
Java学习需要掌握的知识与技能:
1、Java SE部分初级语法,面向对象,异常,IO流,多线程,Java Swing,JDBC,泛型,注解,反射等。
2、数据库部分,基础的sql语句,sql语句调优,索引,数据库引擎,存储过程,触发器,事务等。
3、前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4、Java EE部分,Tomcat和Nginx服务器搭建,配置文件,Servlet,JSP,Filter,Listener,http协议,MVC等。
5、框架部分,每个框架都可以分开学,在去学如何使用SSM 或者SSH框架,如何搭建,如何整合。开发中为什么会用框架,Rest是啥?Spring为啥经久不衰,底层如何实现等。
6、23种设计模式,掌握常用的,比如单例模式的多种实现,责任链模式,工厂模式,装饰器模式等,了解常用场景。
7、基础算法和数据结构,八大排序算法,查找算法。
8、熟练使用maven等构建工具,git等版本控制工具,熟悉常用linux命令,log4j,bug,junit单元测试,日志打印工具,Redis等NoSql。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,建议实地考察对比一下。
祝你学有所成,望采纳。
D. java主要学习哪些内容
学习java是个不错的选择,java在it行业需求的人才每年占上百万个,并且平均每个月薪资也是在1.8W左右。
如果想达到工作标准可以参考下面的内容:
1.Java SE部分 初级语法,面向对象,异常,IO流,多线程,Java Swing,JDBC,泛型,注解,反射等。
2.数据库部分,基础的sql语句,sql语句调优,索引,数据库引擎,存储过程,触发器,事务等。
3. 前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4. Java EE部分,Tomcat和Nginx服务器搭建,配置文件,Servlet,JSP,Filter,Listener,http协议,MVC等。
5. 框架部分,每个框架都可以分开学,在去学如何使用SSM 或者SSH框架,如何搭建,如何整合。开发中为什么会用框架,Rest是啥?Spring为啥经久不衰,底层如何实现等。
6.23种设计模式,掌握常用的,比如单例模式的多种实现,责任链模式,工厂模式,装饰器模式等,了解常用场景。
7. 基础算法和数据结构,八大排序算法,查找算法。
8. 熟练使用maven等构建工具,git等版本控制工具,熟悉常用linux命令,log4j,bug,junit单元测试,日志打印工具,Redis等NoSql。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
E. 关于java中装饰者模式的详解,不理解啊,,谁给解释解释。。。
DataInputStreambis=newDataInputStream(newBufferedInputStream(newFileInputStream("File")));
BufferedInputStreambis2=newBufferedInputStream(newDataInputStream(newFileInputStream("File")));
BufferedInputStream添加了缓冲功能,请问,bis还有缓冲功能么?bis现在是DataInputStream类型的,bis2才是BufferedInputStream类型的,这是我学些IO的一个问题,为什么bis还有缓冲功能?
问题:动态给一个对象添加一些额外的职责
思考:可以修改这个类的源代码吗?
回答:可以
思考:那直接修改源代码就行了
问题:如果不可以修改呢?
思考:如果不可以修改源代码,那怎么添加?
回答:有一些类库可以直接修改编译后的class文件,但是这里不考虑
可以直接包含这个类的对象,如果这个类有实现某些接口,刚好某个需要添加额外智能的方法正好是其中一个方法,那就好办了
Son这个类的paint()方法需要添加一些额外的功能
packagedecorator;
publicclassSonimplementsWork{
publicvoidpaint(){
System.out.println("儿子用铅笔画好了一幅画。");
}
}
这个类不是实现了Work方法吗?那就好办了,新建一个类,继承Work接口:
packagedecorator;
{
//被装饰者
privateWorkwork;
publicMother(Workwork){
this.work=work;
}
privateMother(){}
publicvoidpaint(){
//妈妈装饰者做的职责
System.out.println("妈妈正在做给画上颜色前的准备工作。");
//被装饰者做的职责
work.paint();
//妈妈装饰者做的职责
System.out.println("妈妈给画上好了颜色。");
}
}
那个所谓的Work接口:
packagedecorator;
publicinterfaceWork{
publicvoidpaint();
}
你不是想让Son可以的paint方法多做点工作么?那我new出Mother类执行paint方法不就可以了吗
看代码就知道,其实这个装饰器模式并不怎么好用,每个需要装饰的类或者需要继承某个接口,这实在是一个限制
网上找的资料:
装饰模式(Decorator)
装饰模式又名包装(Wrapper)模式。
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象。
装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。
装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。
装饰模式把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。
装饰模式的角色
抽象构件角色(Component):给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件角色(Concrete Component):定义将要接收附加责任的类。
装饰角色(Decorator):持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口。
具体装饰角色(Concrete Decorator):负责给构件对象“贴上”附加的责任。
Java IO中的装饰模式
在IO中,具体构件角色是节点流,装饰角色是过滤流。
FilterInputStream和FilterOutputStream是装饰角色,而其他派生自它们的类则是具体装饰角色。
装饰模式的特点
装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
装饰对象包含一个真实对象的引用(reference)。
装饰对象接收所有来自客户端的请求,它把这些请求转发给真实的对象。
装饰对象可以在转发这些请求之前或之后附加一些功能。
这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。
程序实例
publicinterfaceComponent
{
publicvoiddoSomething();
}
这是抽象构件角色,是一个接口。具体构件角色实现这个接口:
{
@Override
publicvoiddoSomething()
{
System.out.println("功能A");
}
}
装饰角色:
{
privateComponentcomponent;
publicDecorator(Componentcomponent)
{
this.component=component;
}
@Override
publicvoiddoSomething()
{
component.doSomething();
}
}
其中包含了构件角色的引用,方法调用中利用构件角色的方法。
具体装饰角色(两个):
{
publicConcreteDecorator1(Componentcomponent)
{
super(component);
}
@Override
publicvoiddoSomething()
{
super.doSomething();
this.doAnotherThing();
}
privatevoiddoAnotherThing()
{
System.out.println("功能B");
}
}
{
publicConcreteDecorator2(Componentcomponent)
{
super(component);
}
@Override
publicvoiddoSomething()
{
super.doSomething();
this.doAnotherThing();
}
privatevoiddoAnotherThing()
{
System.out.println("功能C");
}
}
使用测试:
publicclassClient
{
publicstaticvoidmain(String[]args)
{
Componentcomponent=newConcreteComponent();
Componentcomponent1=newConcreteDecorator1(component);
component1.doSomething();
System.out.println("-----------");
Componentcomponent2=newConcreteDecorator2(component1);
component2.doSomething();
}
}
输出:
功能A
功能B
-----------
功能A
功能B
功能C
F. java设计模式有哪些
注:以下内容为复制;
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式
Java开发中的23种设计模式详解
G. java问题 想问下 装饰者模式有什么实际用途呢能举个实际应用的例子吗
装饰者模式用来扩展对象的功能,给对象添加不同的功能。在io流中,比如 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/text.txt")))); 这种对File类的包装,由内层到外层扩展输入流的功能,就是一个典型的装饰者模式。inputstream是被装饰对象,然后Fileinputstream、InputStream、BufferedReader都是它的装饰器,用来扩展它的功能!
H. Java 代理模式和装饰者模式的区别
代理模式与装饰者模式看起来很像,都实现基础对象实现的接口,在其自身对象中都保存着对被代理/被装饰者的对象引用。
先来看看装饰者模式的定义:动态的将责任附加到被装饰者对象上,用于扩展对象的功能。比继承的灵活性大。典型的如Java IO的设计即是装饰者模式的典型应用。
代理模式模式的定义:对其他对象进行代理,以控制对被代理对象的访问。Spring的为业务逻辑层方法生成的代理类,主要进行一些事务控制等。
由定义可以看出装饰的责任是扩展功能 ,而代理主要控制访问。
具体例子可参看Java IO装饰/Spring的动态代理/Hibernate的代理等。
I. java常用的设计模式一共有多少种
1、正如上一位答主所言,java中存在23种面向对象的设计模式,分别是:
1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
2、他们遵从如下原则:
1)单一职责原则
2)里式替换原则
3)依赖倒置原则
4)接口隔离原则
5)迪米特法则
6)开闭原则
3、如果非要用几个简单的字来概括这繁杂的23种设计模式那就是“高内聚,低耦合”。
4、网络--23种设计模式,边研究原理,边敲代码,其义自见。
J. java设计模式的两大主题是什么,
设计模式的两大主题是系统复用与系统扩展。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
(10)java装饰器模式扩展阅读
由四方面组成:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序接口
当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,。
存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。