给模型加装饰器Java,装饰器设计模式
裝飾者模式說(shuō), 只是“將靈活的附加職責(zé)動(dòng)態(tài)地附加到對(duì)象上”。
換句話說(shuō), 裝飾器模式使用合成而不是繼承來(lái)擴(kuò)展對(duì)象在運(yùn)行時(shí)的功能。
裝飾器模式也稱(chēng)為包裝器。
裝飾圖案的優(yōu)勢(shì)
它提供了比靜態(tài)繼承更大的靈活性。
因?yàn)榭梢酝ㄟ^(guò)對(duì)新類(lèi)進(jìn)行編碼來(lái)進(jìn)行更改, 所以可以增強(qiáng)對(duì)象的可擴(kuò)展性。
它允許你從目標(biāo)類(lèi)開(kāi)發(fā)一系列功能, 而不是將所有行為編碼到對(duì)象中, 從而簡(jiǎn)化了編碼。
裝飾圖案的用法
它用于:
當(dāng)你想要透明, 動(dòng)態(tài)地向?qū)ο筇砑勇氊?zé)而又不影響其他對(duì)象時(shí)。
當(dāng)你想向?qū)ο筇砑勇氊?zé)時(shí), 將來(lái)可能需要更改。
通過(guò)子類(lèi)擴(kuò)展功能不再可行。
用于裝飾器模式的UML:
第1步:創(chuàng)建食物界面。
public interface Food {
public String prepareFood();
public double foodPrice();
}// End of the Food interface.
步驟2:創(chuàng)建一個(gè)VegFood類(lèi), 該類(lèi)將實(shí)現(xiàn)Food接口并覆蓋其所有方法。
public class VegFood implements Food {
public String prepareFood(){
return "Veg Food";
}
public double foodPrice(){
return 50.0;
}
}
第3步:創(chuàng)建一個(gè)FoodDecorator抽象類(lèi), 該類(lèi)將實(shí)現(xiàn)Food接口并覆蓋所有方法, 并且可以裝飾更多食物。
public abstract class FoodDecorator implements Food{
private Food newFood;
public FoodDecorator(Food newFood){
this.newFood=newFood;
}
@Override
public String prepareFood(){
return newFood.prepareFood();
}
public double foodPrice(){
return newFood.foodPrice();
}
}
步驟4:創(chuàng)建NonVegFood具體類(lèi), 該類(lèi)將擴(kuò)展FoodDecorator類(lèi)并覆蓋所有方法。
public class NonVegFood extends FoodDecorator{
public NonVegFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Roasted Chiken and Chiken Curry ";
}
public double foodPrice(){
return super.foodPrice()+150.0;
}
}
第5步:創(chuàng)建一個(gè)ChineeseFood具體類(lèi), 該類(lèi)將擴(kuò)展FoodDecorator類(lèi)并覆蓋所有方法。
public class ChineeseFood extends FoodDecorator{
public ChineeseFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Fried Rice and Manchurian ";
}
public double foodPrice(){
return super.foodPrice()+65.0;
}
}
步驟6:創(chuàng)建一個(gè)DecoratorPatternCustomer類(lèi), 該類(lèi)將使用Food接口來(lái)使用客戶想要的食物類(lèi)型(Decorates)。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class DecoratorPatternCustomer {
private static int choice;
public static void main(String args[]) throws NumberFormatException, IOException{
do{
System.out.print("========= Food Menu ============ \n");
System.out.print(" 1. Vegetarian Food. \n");
System.out.print(" 2. Non-Vegetarian Food.\n");
System.out.print(" 3. Chineese Food. \n");
System.out.print(" 4. Exit \n");
System.out.print("Enter your choice: ");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
choice=Integer.parseInt(br.readLine());
switch (choice) {
case 1:{
VegFood vf=new VegFood();
System.out.println(vf.prepareFood());
System.out.println( vf.foodPrice());
}
break;
case 2:{
Food f1=new NonVegFood((Food) new VegFood());
System.out.println(f1.prepareFood());
System.out.println( f1.foodPrice());
}
break;
case 3:{
Food f2=new ChineeseFood((Food) new VegFood());
System.out.println(f2.prepareFood());
System.out.println( f2.foodPrice());
}
break;
default:{
System.out.println("Other than these no food available");
}
return;
}//end of switch
}while(choice!=4);
}
}
輸出量
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 1
Veg Food
50.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 2
Veg Food With Roasted Chiken and Chiken Curry
200.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 3
Veg Food With Fried Rice and Manchurian
115.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 4
Other than these no food available
總結(jié)
以上是生活随笔為你收集整理的给模型加装饰器Java,装饰器设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 等风识得东风面的下一句是什么啊?
- 下一篇: iis+php解析漏洞修复,IIS7.0