java_设计模式_装饰设计模式

Posted wcss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_设计模式_装饰设计模式相关的知识,希望对你有一定的参考价值。

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()+"加入了蔗糖";


class Cat

public Cat(Object obj)
// super();

public Cat(Object obj,Object obj1)
// super();


class cat01 extends Cat

public cat01(Object obj,Object obj1)
super(obj);
/*记住一点:在构造子类时,一定会调用到父类的构造方法。因为父类中的元素也需要被初始化。
* 所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。
* 如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的无参构造 */

以上是关于java_设计模式_装饰设计模式的主要内容,如果未能解决你的问题,请参考以下文章

Java——设计模式(装饰模式_IO)

Java_static关键字,单例设计模式,代码块,final关键字,接口,内部类

Java_你应该知道的26种设计模式

Java设计模式_工厂模式

Java设计模式_单例模式

23种经典设计模式的java实现_5_职责链模式