设计模式之装饰模式的学习
生活随笔
收集整理的這篇文章主要介紹了
设计模式之装饰模式的学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1:裝飾模式的類圖分析
?
其中類的職責(zé)如下: 抽象構(gòu)件角色(Project):給出一個接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對象 具體構(gòu)件角色(Employe):定義一個將要接收附加責(zé)任的類 裝飾角色(Manager):持有一個構(gòu)件對象的實例,并定義一個與抽象構(gòu)件接口一致的接口 具體裝飾角色(ManagerA、ManagerB):負責(zé)給構(gòu)件對象“貼上”附加的責(zé)任 二、下面通過一個軟件項目例子來說明裝飾模式的使用 過程是這樣的: 項目經(jīng)理接到一個項目,項目最終要完成編碼。 項目經(jīng)理接到項目后,先做些前期的工作(比如需求分析、設(shè)計),然后將編碼工作委派給代碼工人,代碼工人干完后,項目經(jīng)理做項目的收尾工作。 實現(xiàn)代碼如下: /**???? * 寫代碼
???? */
????void doCoding();
} /**
???? * 編碼
???? */
????public void doCoding(){
????????System.out.println("代碼工人 在編寫代碼,加班編啊編啊,終于編完了!");
????}
} private Project project;????????//實際上存放的是代碼工人對象
????public Manager(Project project) {
????????this.project = project;
????}
????/**
???? * 編碼
???? */
????public void doCoding() {
????????//項目經(jīng)理開始新的工作
????????startNewWork();
????}
????/**
???? * 模板:定義項目經(jīng)理自己的事情
???? */
????public void startNewWork() {
????????//項目經(jīng)理在做早期工作
????????doEarlyWork();
????????//項目經(jīng)理很牛,做完需求和設(shè)計后,直接將編碼委派給代碼工人干
????????project.doCoding();
????????//項目經(jīng)理在做收尾工作
????????doEndWork();
????}
????/**
???? * 項目經(jīng)理自己的事情:做早期工作
???? */
????public void doEarlyWork() {
????}
????/**
???? * 項目經(jīng)理做收尾工作
???? */
????public void doEndWork() {
????}
} public ManagerA(Project project) {
????????super(project);
????}
????/**
???? * 項目經(jīng)理自己的事情:做早期工作
???? */
????public void doEarlyWork() {
????????System.out.println("項目經(jīng)理A 在做需求分析");
????????System.out.println("項目經(jīng)理A 在做架構(gòu)設(shè)計");
????????System.out.println("項目經(jīng)理A 在做詳細設(shè)計");
????}
} public ManagerB(Project project) {
????????super(project);
????}
???? /**
???? * 項目經(jīng)理自己的事情:做早期工作
???? */
????public void doEarlyWork() {
????????System.out.println("項目經(jīng)理B 在做需求分析");
????????System.out.println("項目經(jīng)理B 在做詳細設(shè)計");
????}
????/**
???? * 項目經(jīng)理做收尾工作
???? */
????public void doEndWork() {
????????System.out.println("項目經(jīng)理B 在做收尾工作");
????}
} public static void main(String args[]) {
????????Project employe = new Employe();????????//代碼工人
????????Project managerA = new ManagerA(employe); //項目經(jīng)理
????????Project managerB = new ManagerB(employe); //項目經(jīng)理
????????//以經(jīng)理的名義將編碼完成,功勞都是經(jīng)理的,實際編碼的是工人
????????managerA.doCoding();
????????managerB.doCoding();
????}
} 運行結(jié)果: 項目經(jīng)理A 在做需求分析
項目經(jīng)理A 在做架構(gòu)設(shè)計
項目經(jīng)理A 在做詳細設(shè)計
代碼工人 在編寫代碼,加班編啊編啊,終于編完了!
項目經(jīng)理B 在做需求分析
項目經(jīng)理B 在做詳細設(shè)計
代碼工人 在編寫代碼,加班編啊編啊,終于編完了!
項目經(jīng)理B 在做收尾工作
Process finished with exit code 0
備注:轉(zhuǎn)自 http://lavasoft.blog.51cto.com/62575/90853/
?
轉(zhuǎn)載于:https://www.cnblogs.com/goldberg/p/5439195.html
總結(jié)
以上是生活随笔為你收集整理的设计模式之装饰模式的学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于js复制文本信息(按钮级别)
- 下一篇: Erlang --- 基本概念