拉面料理店中的装饰者设计模式
package july_Thirtieth.Decorator;
public abstract class Noodle {
abstract void hardness();
abstract void soup();
abstract int price();
}
package july_Thirtieth.Decorator;
public class LeeNoodle extends Noodle{
@Override
void hardness() {
System.out.println("面");
}
@Override
void soup() {
System.out.println("汤");
}
@Override
int price() {
return 28;
}
}
package july_Thirtieth.Decorator;
public class MoonNoodle extends Noodle {
@Override
void hardness() {
System.out.println("面");
}
@Override
void soup() {
System.out.println("汤");
}
@Override
int price() {
return 28;
}
}
package july_Thirtieth.Decorator;
public abstract class ChooseNoodle extends Noodle{
private Noodle noodle;
public ChooseNoodle(Noodle noodle) {
this.noodle = noodle;
}
@Override
void hardness() {
noodle.hardness();
}
@Override
void soup() {
noodle.soup();
}
@Override
int price() {
return noodle.price();
}
}
package july_Thirtieth.Decorator;
public interface NoodleDecorate {
default void onion(){
System.out.print("加葱");
}
default void chili(){
System.out.println("加辣椒");
}
default void garlic(){
System.out.println("加蒜");
}
default void parsley(){
System.out.println("加香菜");
}
}
package july_Thirtieth.Decorator;
public class PigNoodle extends ChooseNoodle implements NoodleDecorate{
public PigNoodle(Noodle noodle) {
super(noodle);
}
@Override
void hardness() {
System.out.print("特硬");
super.hardness();
}
@Override
void soup() {
System.out.println("豚骨");
super.soup();
}
@Override
int price() {
return super.price() + 10;
}
}
package july_Thirtieth.Decorator;
public class BeefNoodle extends ChooseNoodle implements NoodleDecorate{
public BeefNoodle(Noodle noodle) {
super(noodle);
}
@Override
void hardness() {
System.out.print("软");
super.hardness();
}
@Override
void soup() {
System.out.print("冬阴功牛肉");
super.soup();
}
@Override
int price() {
return super.price() + 15;
}
}
package july_Thirtieth.Decorator;
public class NoodleTest {
public static void main(String[] args) {
final BeefNoodle beefNoodle = new BeefNoodle(new LeeNoodle());
final int price = beefNoodle.price();
System.out.print("Lee点的面是: ");
beefNoodle.soup();
beefNoodle.onion();
beefNoodle.chili();
System.out.println(price);
final BeefNoodle beefNoodle1 = new BeefNoodle(new MoonNoodle());
System.out.println(beefNoodle1.price());
final PigNoodle pigNoodle = new PigNoodle(new LeeNoodle());
System.out.println(pigNoodle.price());
}
}