//NewPerson,Man,Woman同属于Person体系中,要拓展Man或者Woman的eat功能
//不需要通过Man或者Woman的子类来实现,可以把拓展功能统一定义在NewPerson(装饰类)中。
//进而在Man或者Woman拓展功能时直接被NewPerson装饰就可以实现功能拓展。
class NewPerson extends Person{
private Person p;
NewPerson(Person p){
this.p=p;
}
void eat(){
System.out.println("开胃酒");
p.eat();
System.out.println("吃点水果");
}
}
class Woman extends Person{
void eat(){
System.out.println("女人吃饭");
}
}
class Man extends Person{
void eat(){
System.out.println("男人吃饭");
}
}
一:继承
如通过子类继承来拓展Man类的eat功能
//如果想增强男人的eat功能,就要继承Man,这样通过子类SubMan来增强。
class SubMan extends Man{
void eat(){
System.out.println("开胃酒");
super.eat();
System.out.println("吃点水果");
System.out.println("饭后来根烟");
}
}
通过继承来拓展Woman类的eat功能还需要像Man一样,这样最好导致代码比较臃肿,为了避免这种臃肿,同时为了提高效率,就用到了装饰模式。
class Man extends Person{
void eat(){
System.out.println("男人吃饭");
}
}
//如果想增强男人的eat功能,就要继承Man,这样通过子类SubMan来增强。
class SubMan extends Man{
void eat(){
System.out.println("开胃酒");
super.eat();
System.out.println("吃点水果");
System.out.println("饭后来根烟");
}
}
class SubWoman extends Woman{
void eat(){
System.out.println("开胃酒");
super.eat();
System.out.println("吃点水果");
System.out.println("饭后来根烟");
}
}
二:装饰模式
通过装饰模式来要拓展Man或者Woman的eat功能,就没必要再生成子类了
NewPerson,Man,Woman同属于Person体系中,要拓展Man或者Woman的eat功能
不需要通过Man或者Woman的子类来实现,可以把拓展功能统一定义在NewPerson(装饰类)中。
进而在Man或者Woman拓展功能时直接被NewPerson装饰就可以实现功能拓展。
写完后调用一下试试。
public static void main(String[]args){
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Man m=new Man();
<span style="white-space:pre"> </span>NewPerson newm=new NewPerson(m);
<span style="white-space:pre"> </span>newm.eat();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Woman w=new Woman();
<span style="white-space:pre"> </span>NewPerson ww=new NewPerson(w);
<span style="white-space:pre"> </span>ww.eat();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
下面是运行结果
开胃酒
男人吃饭
吃点水果
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
存中…(img-20K01mjw-1714339421535)]
- 第三个则是并发编程(72个知识点学习)
[外链图片转存中…(img-3ZfNEwcR-1714339421535)]
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
[外链图片转存中…(img-eN68ca8s-1714339421535)]
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来