zoukankan      html  css  js  c++  java
  • 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()的方式调用父类的无参构造 */
    }
    }

  • 相关阅读:
    KOL运营之——如何与网文作者高效地约稿?
    C#利用反射来判断对象是否包含某个属性的实现方法
    MySQL数据库忘记密码
    MySQL基本概念以及简单操作
    .net Mvc框架原理
    跨域资源共享 CORS 详解
    DOM 操作技术【JavaScript高级程序设计第三版】
    关于在"a"标签中添加点击事件的一些问题
    Visual Studio 2017各版本安装包离线下载、安装全解析
    详解Session分布式共享(.NET CORE版)
  • 原文地址:https://www.cnblogs.com/wcss/p/11031540.html
Copyright © 2011-2022 走看看