java设计模式
所谓的设计模式,其实就是前人总结的写代码的套路,java中共有23种设计模式。
装饰设计模式
装饰设计模式的主要功能就是在原有的被装饰者的基础上增加其他功能。
代码实现:
public class demo{
public static void main(String[] args){
Man man = new Man();
man.eat();
}
}
class Man{
private String name;
private int age;
public Man(){
}
public Man(String name,int age){
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("会吃");
}
}
如上代码所示,现在通过Person类来模拟人,人会吃东西,现在想增加一个飞的技能,有三种方式,第一种是继承:
public class demo{
public static void main(String[] args){
SuperMan superMan = new SuperMan();
superMan.eat();
superMan.fly();
}
}
class SuperMan extends Man{
public SuperMan(){
}
public SuperMan(String name,int age){
super(name,age);
}
public void fly(){
System.out.println("会飞");
}
}
class Man{
private String name;
private int age;
public Man(){
}
public Man(String name,int age){
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("会吃");
}
}
通过继承的方式确实可以起到加强person类功能的作用,但是需要重新创建对象。
第二种是装饰设计模式,它可以对已有的对象装饰,直接看代码:
public class demo{
public static void main(String[] args){
Man man = new Man();
SuperMan superMan = new SuperMan(man);
superMan.eat();
superMan.fly();
}
}
interface Ani{
public void eat();
}
class Man implements Ani{
private String name;
private int age;
public Man(){
}
public Man(String name,int age){
this.name = name;
this.age = age;
}
@Override
public void eat(){
System.out.println("会吃");
}
}
class SuperMan implements Ani{
private Man man = null;
public SuperMan(Man man){
this.man = man;
}
@Override
public void eat(){
System.out.println("可以增加吃之前的动作");
man.eat();
System.out.println("可以增加吃之后的动作");
}
public void fly(){
System.out.println("man会飞了");
}
}
上面代码就是装饰设计模式啦,它的主要实现过程是:
1.写一个装饰类并在装饰类的内部提供一个可以接受被装饰者对象的构造方法,将该对象保存在类的内部。
2.提供和被装饰者相同的方法,通常会选择和被装饰者实现相同的接口或继承相同的父类,在这些方法中调用在构造方法中传入的被装饰者相同的方法。
3.需要增强的功能,或在原有的功能上增强,或提供新的方法。
还有最后一种增强类功能的方式是动态代理,这里暂时不做介绍。