Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

Combinations and decorators

interface Countable {   float getValue();   String getName(); } class Book implements Countable {   private String description = "books";   private float value = 0.75f;   public float getValue() {     return value;   }   public String getName() {     return description;   } } class Dog implements Countable {   private String description = "dogs";   private float cost = 1;   public float getValue() {     return cost;   }   public String getName() {     return description;   } } class Cat implements Countable {   private float cost = 1;   private String description = "Cat";   public float getValue() {     return cost;   }   public String getName() {     return description;   } } class Child implements Countable {   private float cost = 1;   private String description = "child";   public float getValue() {     return cost;   }   public String getName() {     return description;   } } class Cow implements Countable {   private float cost = 1.25f;   private String description = "Cow";   public float getValue() {     return cost;   }   public String getName() {     return description;   } } abstract class Number implements Countable {   protected Countable component;   public Number(Countable component) {     this.component = component;   }   public float getValue() {     return component.getValue();   }   public String getName() {     return component.getName();   } } class MyBook extends Number {   private float cost = 0.75f;   public MyBook(Countable component) {     super(component);   }   public String getName() {     return component.getName() + " my books";   }   public float getValue() {     return cost + component.getValue();   } } class Integer extends Number {   private float cost = 0.50f;   public Integer(Countable component) {     super(component);   }   public float getValue() {     return cost + component.getValue();   }   public String getName() {     return component.getName() + " integer";   } } class Float extends Number {   public Float(Countable component) {     super(component);   }   public String getName() {     return component.getName() + " float";   } } class Double extends Number {   public Double(Countable component) {     super(component);   }   public String getName() {     return component.getName() + " double";   } } class Decimal extends Number {   public Decimal(Countable component) {     super(component);   }   public String getName() {     return component.getName() + " decimal";   } } public class CountableDemo {   public static void main(String[] args) {     Countable cappuccino = new Cat();     System.out.println(cappuccino.getName() + ": $" + cappuccino.getValue());     Countable cafeMocha = new Integer(new Float(new Cow()));     System.out.println(cafeMocha.getName() + ": $" + cafeMocha.getValue());   } }