国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 裝飾模式(Decorator Pattern)詳解

2019-11-26 13:45:16
字體:
供稿:網(wǎng)友

裝飾器模式(Decorator Pattern)允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu)。這種類型的設計模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個包裝。

這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

我們通過下面的實例來演示裝飾器模式的使用。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。

實現(xiàn)

我們將創(chuàng)建一個 Shape 接口和實現(xiàn)了 Shape 接口的實體類。然后我們創(chuàng)建一個實現(xiàn)了 Shape 接口的抽象裝飾類ShapeDecorator,并把 Shape 對象作為它的實例變量。

RedShapeDecorator 是實現(xiàn)了 ShapeDecorator 的實體類。

DecoratorPatternDemo,我們的演示類使用 RedShapeDecorator 來裝飾 Shape 對象。

步驟 1

創(chuàng)建一個接口。

Shape.java

public interface Shape { void draw();} 

步驟 2

創(chuàng)建實現(xiàn)接口的實體類。

Rectangle.java

public class Rectangle implements Shape {  @Override public void draw() {  System.out.println("Shape: Rectangle"); }}Circle.javapublic class Circle implements Shape {  @Override public void draw() {  System.out.println("Shape: Circle"); }} 

步驟 3

創(chuàng)建實現(xiàn)了 Shape 接口的抽象裝飾類。

ShapeDecorator.java

public abstract class ShapeDecorator implements Shape { protected Shape decoratedShape;  public ShapeDecorator(Shape decoratedShape){  this.decoratedShape = decoratedShape; }  public void draw(){  decoratedShape.draw(); } } 

步驟 4

創(chuàng)建擴展自 ShapeDecorator 類的實體裝飾類。

RedShapeDecorator.java

public class RedShapeDecorator extends ShapeDecorator {  public RedShapeDecorator(Shape decoratedShape) {  super(decoratedShape);   }  @Override public void draw() {  decoratedShape.draw();     setRedBorder(decoratedShape); }  private void setRedBorder(Shape decoratedShape){  System.out.println("Border Color: Red"); }}

 步驟 5

使用 RedShapeDecorator 來裝飾 Shape 對象。

DecoratorPatternDemo.java

public class DecoratorPatternDemo { public static void main(String[] args) {   Shape circle = new Circle();   Shape redCircle = new RedShapeDecorator(new Circle());   Shape redRectangle = new RedShapeDecorator(new Rectangle());  System.out.println("Circle with normal border");  circle.draw();   System.out.println("/nCircle of red border");  redCircle.draw();   System.out.println("/nRectangle of red border");  redRectangle.draw(); }}

 步驟 6

驗證輸出。

Circle with normal borderShape: CircleCircle of red borderShape: CircleBorder Color: RedRectangle of red borderShape: RectangleBorder Color: Red

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵东县| 栾城县| 烟台市| 晋江市| 酒泉市| 新田县| 绵竹市| 阿克| 天柱县| 灯塔市| 商水县| 锡林郭勒盟| 黑龙江省| 方山县| 玉林市| 会理县| 夏邑县| 江都市| 磐安县| 平遥县| 来宾市| 哈密市| 平武县| 庆城县| 淳安县| 永胜县| 林口县| 孝昌县| 左云县| 蒙阴县| 滦平县| 大埔区| 顺义区| 柏乡县| 房产| 洛隆县| 沙洋县| 乌兰察布市| 昂仁县| 安新县| 汤原县|