public class a03 {
public static void main(String[] args) {
} } class Cat{
public Cat(Object obj) { // super(); } } class cat01 extends Cat{
public cat01(Object obj) { super(obj); /*记住一点:在构造子类时,一定会调用到父类的构造方法。因为父类中的元素也需要被初始化。 所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。 如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的无参构造 */ } }
package IO; /* * 装饰设计模式 模拟咖啡 1.抽象组件:需要装饰的抽象对象(接口或抽象父类) 2.具体组件:需要装饰的对象 3.抽像装饰类:包含了对抽象组件的引用以及装饰着共有的方法 4,具体装饰类:被装饰的对象 */ public class test2 { public static void main(String[] args) { Drink coffee=new Coffee(); System.out.println(coffee.info()+"--->"+coffee.cost()); Drink suger=new Suger(coffee);//装饰 System.out.println(suger.info()+"--->"+suger.cost()); Drink milk=new milk(coffee); System.out.println(milk.info()+"--->"+milk.cost()); milk=new milk(suger); System.out.println(milk.info()+"--->"+milk.cost()); } } //抽象组件 interface Drink{ double cost();//费用 String info();//说明 } //具体组件 class Coffee implements Drink{ private String name="原味咖啡"; @Override public double cost() { return 10; } @Override public String info() { return name; } } //抽象装饰类 abstract class Decorate implements Drink{ //对抽象组件的引用 private Drink drink; public Decorate(Drink drink){ this.drink=drink; } @Override public double cost() { return this.drink.cost(); } @Override public String info() { return this.drink.info(); } } //具体的装饰类 class milk extends Decorate{ public milk(Drink drink) { super(drink);//super(参数):调用基类中的某一个构造函数 } @Override public double cost() { return super.cost()*4; } @Override public String info() { return super.info()+"加入了牛奶"; } } //具体的装饰类 class Suger extends Decorate{
public Suger(Drink drink) { super(drink); } @Override public double cost() { return super.cost()*2; } @Override public String info() { return super.info()+"加入了蔗糖"; } }
package IO;
/*
* 装饰设计模式
实现放大器的功能
*/
public class test {
public static void main(String[] args) {
Person p=new Person();
p.say();
//装饰
Amplifier am=new Amplifier(p);
am.say();
}
}
interface Say{
void say();
}
class Person implements Say{
private int voice=10;
public int getVoice() {
return voice;
}
public void setVoice(int voice) {
this.voice = voice;
}
@Override
public void say() {
System.out.println("人的声音为"+this.getVoice());
}
}
class Amplifier implements Say{
private Person p;
Amplifier(Person p) {
this.p=p;
}
@Override
public void say() {
System.out.println("人的声音为"+this.p.getVoice()*100);
System.out.println("zaoyin..........");
}
}