├── .classpath
├── .gitignore
├── .project
├── .settings
└── org.eclipse.jdt.core.prefs
├── README.md
├── client
├── c01
│ └── simpleFactory
│ │ ├── CalculatorClient.java
│ │ └── CashFactoryClient.java
├── c02
│ └── strategy
│ │ └── CashClient.java
├── c06
│ └── decorator
│ │ └── DecoratorClient.java
├── c07
│ └── proxy
│ │ └── ProxyClient.java
├── c08
│ └── factory
│ │ └── NightingaleClient.java
├── c09
│ └── prototype
│ │ └── ResumeClient.java
├── c10
│ └── template
│ │ └── TestPaperClient.java
├── c12
│ └── facade
│ │ └── FundClient.java
├── c13
│ └── builder
│ │ └── PersonBuilderClient.java
├── c14
│ └── observer
│ │ └── BossNotifyClient.java
├── c15
│ └── abstractFactory
│ │ └── DaoClient.java
├── c16
│ └── state
│ │ └── StateClient.java
├── c17
│ └── adapter
│ │ └── TranslatorClient.java
├── c18
│ └── memento
│ │ └── GameRoleClient.java
├── c19
│ └── composite
│ │ └── CompanyClient.java
├── c20
│ └── iterator
│ │ └── IteratorClient.java
├── c21
│ └── singleton
│ │ └── SingletonClient.java
├── c22
│ └── bridge
│ │ └── HandsetClient.java
├── c23
│ └── command
│ │ └── BarbecueClient.java
├── c24
│ └── ChainOfResponsibility
│ │ └── ManagerClient.java
├── c25
│ └── mediator
│ │ └── UniteNationsClient.java
├── c26
│ └── flyweight
│ │ └── WebsiteClient.java
├── c27
│ └── interpreter
│ │ └── ContextPlayClient.java
└── c28
│ └── visitor
│ └── PersonActionClient.java
├── src
├── c01
│ └── simpleFactory
│ │ ├── Calculator.java
│ │ ├── CalculatorA.java
│ │ ├── CalculatorFactory.java
│ │ ├── CalulatorAdd.java
│ │ ├── CalulatorDiv.java
│ │ ├── CalulatorMul.java
│ │ └── CalulatorSub.java
├── c02
│ └── strategy
│ │ ├── CashContext.java
│ │ ├── CashContextPro.java
│ │ └── simpleFactory
│ │ ├── CashDiscount.java
│ │ ├── CashFactory.java
│ │ ├── CashNomal.java
│ │ ├── CashReturn.java
│ │ └── CashSuper.java
├── c06
│ └── decorator
│ │ ├── Finery.java
│ │ ├── Person.java
│ │ ├── Sneakers.java
│ │ ├── TShirts.java
│ │ └── Trouser.java
├── c07
│ └── proxy
│ │ ├── IGiveGift.java
│ │ ├── Proxy.java
│ │ ├── Pursuit.java
│ │ └── SchoolGirl.java
├── c08
│ └── factory
│ │ ├── IFactory.java
│ │ ├── Nightingale.java
│ │ ├── SimpleFactory.java
│ │ ├── Undergraduate.java
│ │ ├── UndergraduateFactory.java
│ │ ├── Volunteer.java
│ │ └── VolunteerFactory.java
├── c09
│ └── prototype
│ │ └── Resume.java
├── c10
│ └── template
│ │ ├── TestPaper.java
│ │ ├── TestPaperA.java
│ │ └── TestPaperB.java
├── c12
│ └── facade
│ │ └── Fund.java
├── c13
│ └── builder
│ │ ├── GundamBuilder.java
│ │ ├── LinePersonBuilder.java
│ │ ├── PersonBuilder.java
│ │ └── PersonDirector.java
├── c14
│ └── observer
│ │ ├── Boss.java
│ │ ├── NBAObserver.java
│ │ ├── Observer.java
│ │ ├── Secretary.java
│ │ ├── StockObserver.java
│ │ └── Subject.java
├── c15
│ └── abstractFactory
│ │ ├── Department.java
│ │ ├── IDeptDao.java
│ │ ├── IFactory.java
│ │ ├── IUserDao.java
│ │ ├── OracleDaoFactory.java
│ │ ├── OracleDeptDao.java
│ │ ├── OracleUserDao.java
│ │ ├── SqlServerDaoFactory.java
│ │ ├── SqlServerDeptDao.java
│ │ ├── SqlServerUserDao.java
│ │ └── User.java
├── c16
│ └── state
│ │ ├── AfternoonState.java
│ │ ├── EveningState.java
│ │ ├── ForenoonState.java
│ │ ├── NoonState.java
│ │ ├── RestState.java
│ │ ├── State.java
│ │ └── Work.java
├── c17
│ └── adapter
│ │ ├── CenterPlayer.java
│ │ ├── ForeignCenterPlayer.java
│ │ ├── Player.java
│ │ └── Translator.java
├── c18
│ └── memento
│ │ ├── GameRole.java
│ │ ├── RoleStateCareTaker.java
│ │ └── RoleStateMemo.java
├── c19
│ └── composite
│ │ ├── Company.java
│ │ ├── ConcreteCompany.java
│ │ ├── FinaneDept.java
│ │ └── HRDept.java
├── c20
│ └── iterator
│ │ ├── Aggregate.java
│ │ ├── ConcreteAggregate.java
│ │ ├── ConcreteIterator.java
│ │ └── Iterator.java
├── c21
│ └── singleton
│ │ └── Singleton.java
├── c22
│ └── bridge
│ │ ├── HandsetBrand.java
│ │ ├── HandsetBrandM.java
│ │ ├── HandsetBrandN.java
│ │ ├── HandsetContactList.java
│ │ ├── HandsetGame.java
│ │ └── HandsetSoft.java
├── c23
│ └── command
│ │ ├── BakeChickenWingCommand.java
│ │ ├── BakeMutonCommand.java
│ │ ├── Barbecuer.java
│ │ ├── Command.java
│ │ └── Waiter.java
├── c24
│ └── ChainOfResponsibility
│ │ ├── ApplyRequest.java
│ │ ├── CommonManager.java
│ │ ├── GeneralManager.java
│ │ ├── Majordomo.java
│ │ └── Manager.java
├── c25
│ └── mediator
│ │ ├── Country.java
│ │ ├── Iraq.java
│ │ ├── UNSC.java
│ │ ├── USA.java
│ │ └── UniteNations.java
├── c26
│ └── flywight
│ │ ├── ConcreteWebsite.java
│ │ ├── User.java
│ │ ├── WebSiteFactory.java
│ │ └── Website.java
├── c27
│ └── interpreter
│ │ ├── Expression.java
│ │ ├── Note.java
│ │ ├── PlayContext.java
│ │ └── Scale.java
└── c28
│ └── visitor
│ ├── Action.java
│ ├── Failing.java
│ ├── Man.java
│ ├── ObjectStructure.java
│ ├── Person.java
│ ├── Success.java
│ └── Woman.java
└── uml
├── AbstractFactory.ucls
├── Adapter.ucls
├── Bridge.ucls
├── Builder.ucls
├── ChainOfResponsibility.ucls
├── Command.ucls
├── Composite.ucls
├── Decorator.ucls
├── Facade.ucls
├── Factory.ucls
├── Flyweight.ucls
├── Interpreter.ucls
├── Iterator.ucls
├── Mediator.ucls
├── Memento.ucls
├── Observer.ucls
├── SimpleFactory.ucls
├── Singleton.ucls
├── State.ucls
├── Strategy.ucls
├── Template.ucls
├── Visitor.ucls
├── prototype.ucls
└── proxy.ucls
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /bin/
2 | /README.md
3 | /.gitignore
4 | /README.md
5 | /README.md
6 | /README.md
7 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | BigTalkDesignPattern
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.sirius.nature.modelingproject
16 | org.eclipse.jdt.core.javanature
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5 | org.eclipse.jdt.core.compiler.compliance=1.8
6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate
7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate
8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate
9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
11 | org.eclipse.jdt.core.compiler.source=1.8
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # bigTalkDesignPatternJava 設計模式
2 |
3 | 學習設計模式過程中見過不少其他語言的的範例程式,這邊用java重新寫過一次幫助自己理解各種設計模式的用法,
4 | 重寫一次花了不少時間,留個紀錄。
5 |
--------------------------------------------------------------------------------
/client/c01/simpleFactory/CalculatorClient.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 計算機-客戶端(簡單工廠模式 )
5 | * calculatorA()是測試沒有使用簡單工廠模式的計算機
6 | * CalculatorFactory()是使用簡單工廠模式的計算機
7 | * @author Yan
8 | *
9 | */
10 | public class CalculatorClient {
11 | public static void main(String[] args) {
12 | calculatorA();
13 | CalculatorFactory();
14 | }
15 |
16 | /**
17 | * 業物邏輯與UI拆開的簡易計算機測試
18 | */
19 | public static void calculatorA(){
20 | System.out.println(">>>> calculatorA 測試 <<<< ");
21 |
22 | // 輸入值
23 | Integer numberA = 10;
24 | Integer numberB = 2;
25 | char operator = '+';
26 |
27 | try {
28 | // 計算並輸出
29 | System.out.println("輸入:" + numberA + operator + numberB );
30 | CalculatorA calculator = new CalculatorA();
31 | int result = calculator.calculate(numberA, numberB, operator);
32 | System.out.println("計算結果:" + numberA + operator + numberB + "=" + result);
33 | } catch (Exception e) {
34 | e.printStackTrace();
35 | }
36 | }
37 |
38 | /**
39 | * 使用簡單工廠模式(SimpleFactory Pattern)實現簡易計算機
40 | */
41 | public static void CalculatorFactory(){
42 | System.out.println(">>>> CalculatorFactory 測試 <<<< ");
43 |
44 | // 輸入值
45 | Integer numberA = 10;
46 | Integer numberB = 2;
47 | char operator = '-';
48 |
49 | try {
50 | System.out.println("輸入:" + numberA + operator + numberB );
51 | Calculator calculator = CalculatorFactory.getCalculator(operator);
52 | calculator.setNumber(numberA, numberB);
53 | int result = calculator.getResult();
54 | System.out.println("計算結果:" + numberA + operator + numberB + "=" + result);
55 | } catch (Exception e) {
56 | e.printStackTrace();
57 | }
58 |
59 |
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/client/c01/simpleFactory/CashFactoryClient.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | import org.junit.Test;
4 |
5 | import c02.strategy.simpleFactory.CashFactory;
6 | import c02.strategy.simpleFactory.CashSuper;
7 |
8 | /**
9 | * 商場收銀客戶端(簡單工廠)
10 | * @author Yan
11 | *
12 | */
13 | public class CashFactoryClient {
14 |
15 | @Test
16 | public void CashFactoryTest(){
17 | int count = 5; //數量
18 | int price = 100; //價錢
19 | String type = "normal";
20 | //type = "discount85";
21 | //type = "return300n100";
22 |
23 | // 簡單工廠模式,客戶端程式需知道 CashSuper與 CashFactory兩個類別
24 | CashSuper csN = CashFactory.createCashAccept(type);
25 |
26 | int totalN = csN.acceptCash(count*price);
27 | System.out.println("買了:" + count*price + "收費模式normal 需收費:" + totalN );
28 | }
29 |
30 |
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/client/c02/strategy/CashClient.java:
--------------------------------------------------------------------------------
1 | package c02.strategy;
2 |
3 | import org.junit.Test;
4 |
5 | import c02.strategy.CashContext;
6 | import c02.strategy.CashContextPro;
7 | import c02.strategy.simpleFactory.CashDiscount;
8 | import c02.strategy.simpleFactory.CashNomal;
9 | import c02.strategy.simpleFactory.CashReturn;
10 | /**
11 | * 收銀櫃檯-客戶端(策略模式)
12 | * @author Yan
13 | *
14 | */
15 | public class CashClient {
16 | public static void main(String[] args) {
17 | CashContextTest();
18 | CashContextProTest();
19 | }
20 |
21 | /**
22 | * 策略模式
23 | */
24 | public static void CashContextTest(){
25 | int count = 5; //數量
26 | int price = 100; //價錢
27 | double discount = 0.9;
28 |
29 | // 與工廠模式相同,客戶端程式需傳入收費方式字串
30 | String type = "discount";
31 | CashContext cct = null;
32 |
33 | // 因為這樣又把switch case的程式暴露在客戶端程式,因此需要把判斷程式搬到Context內,將策略模式與工廠模式結合
34 | switch(type) {
35 | case "normal": cct = new CashContext(new CashNomal()); break;
36 | case "discount": cct = new CashContext(new CashDiscount(discount)); break;
37 | case "return": cct = new CashContext(new CashReturn(300,100));break;
38 | }
39 | System.out.println("========策略模式==========");
40 |
41 | System.out.println("買了:" + count*price + " 收費模式" + type +" 需收費:" + cct.GetResult(price*count) );
42 |
43 | }
44 |
45 | @Test
46 | /**
47 | * 結合策略模式與工廠模式
48 | */
49 | public static void CashContextProTest(){
50 | int count = 5; //數量
51 | int price = 100; //價錢
52 | String type = "discount";
53 | CashContextPro cct = new CashContextPro(type);
54 | System.out.println("========結合策略模式與工廠模式==========");
55 | System.out.println("買了:" + count*price + " 收費模式" + type +" 需收費:" + cct.GetResult(price*count) );
56 |
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/client/c06/decorator/DecoratorClient.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 打扮-客戶端(裝飾模式)
4 | * @author Yan
5 | *
6 | */
7 | public class DecoratorClient {
8 | public static void main(String[] args) {
9 | Person xc = new Person("小菜");
10 |
11 |
12 | Finery sneakers = new Sneakers();
13 | sneakers.decorate(xc);
14 |
15 | Finery trouser = new Trouser(sneakers);
16 | Finery tShirts = new TShirts(trouser);
17 |
18 |
19 | //trouser.decorate(sneakers);
20 | //tShirts.decorate(trouser);
21 | tShirts.show();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/client/c07/proxy/ProxyClient.java:
--------------------------------------------------------------------------------
1 | package c07.proxy;
2 |
3 | import c07.proxy.Proxy;
4 | import c07.proxy.Pursuit;
5 | import c07.proxy.SchoolGirl;
6 |
7 | /**
8 | * 代理人幫人送禮物-客戶端(代理模式)
9 | * @author Yan
10 | *
11 | */
12 | public class ProxyClient {
13 | public static void main(String[] args) {
14 | SchoolGirl girl = new SchoolGirl();
15 | girl.name = "校花Sarah";
16 |
17 | // 以下程式碼實現 "戴笠哥幫魯什弟"送禮物給校花Sarah"
18 | Pursuit ps = new Pursuit("魯什弟");
19 | ps.setSchoolGirl(girl);
20 | Proxy proxy = new Proxy(ps, "戴笠哥");
21 | proxy.giveChocolate();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/client/c08/factory/NightingaleClient.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | import c08.factory.IFactory;
4 | import c08.factory.Nightingale;
5 | import c08.factory.SimpleFactory;
6 | import c08.factory.VolunteerFactory;
7 |
8 | /**
9 | * 南丁格爾老人服務團-客戶端(工廠模式)
10 | * @author Yan
11 | *
12 | */
13 | public class NightingaleClient {
14 | public static void main(String[] args) {
15 | // 大學生跑去幫助老人,使用simple factory
16 | undergraduateDoHelp();
17 |
18 | // 社區義工幫助老人,使用factory
19 | volunteerDoHelp();
20 | }
21 |
22 | /**
23 | * 使用Factory,優點是當有新的物件類別,或是需要修改現有類別產生方式時,不用修改到Factory
24 | */
25 | private static void volunteerDoHelp() {
26 | IFactory factory = new VolunteerFactory();
27 | Nightingale volunteer = factory.CreateNightingale();
28 | volunteer.buyRice();
29 | }
30 |
31 |
32 | /**
33 | * 使用simple factory產生幫助老人的物件,如果要修改產生物件的方法,需要修改simple factory程式碼
34 | */
35 | public static void undergraduateDoHelp(){
36 | Nightingale student = SimpleFactory.CreatNightingale("undergraduate");
37 | System.out.println("社區大學生幫助老人:");
38 | student.buyRice();
39 | student.sweep();
40 | student.wash();
41 |
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/client/c09/prototype/ResumeClient.java:
--------------------------------------------------------------------------------
1 | package c09.prototype;
2 |
3 | import c09.prototype.Resume;
4 |
5 | /**
6 | * 履歷-客戶端 (原型模式)
7 | * @author Yan
8 | *
9 | */
10 | public class ResumeClient {
11 | public static void main(String[] args) throws CloneNotSupportedException {
12 | Resume resume = new Resume("Yan");
13 | resume.setProfile("31", "master");
14 | resume.setWorkExperience("2016-2019", "FOYA");
15 |
16 | // 履歷表2跟1有許多相似的地方,因此直接複製履歷表1做修改
17 | Resume resume2 = (Resume) resume.clone();
18 | resume2.setWorkExperience("2011-2016", "IISI");
19 |
20 | // 履歷表3跟1有許多相似的地方,因此直接複製履歷表1做修改
21 | Resume resume3 = (Resume) resume.clone();
22 | resume3.setProfile("21", "bachelor");
23 | resume3.setWorkExperience("2005-2011", "TMD");
24 |
25 | resume.display();
26 | resume2.display();
27 | resume3.display();
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/client/c10/template/TestPaperClient.java:
--------------------------------------------------------------------------------
1 | package c10.template;
2 |
3 | import c10.template.TestPaper;
4 | import c10.template.TestPaperA;
5 | import c10.template.TestPaperB;
6 |
7 | /**
8 | * 考試卷-客戶端(範本模式)
9 | * 一開始TestPaper類別就已經實作出題的method QuestionA(), QuestionB(), QuestionC()
10 | * 也實作了印出整張考卷做答與題目的method display()
11 | * 因此真正發給學生的考卷TestPaperA, TestPaperB只要實現寫答案的method answerA(), answerB(), answerC()即可
12 | * @author Yan
13 | *
14 | */
15 | public class TestPaperClient {
16 | public static void main(String[] args) {
17 | System.out.println("學生A的試卷");
18 | TestPaper paperA = new TestPaperA();
19 | paperA.display();
20 |
21 | System.out.println();
22 | System.out.println("學生B的試卷");
23 | TestPaper paperB = new TestPaperB();
24 | paperB.display();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/client/c12/facade/FundClient.java:
--------------------------------------------------------------------------------
1 | package c12.facade;
2 |
3 | import c12.facade.Fund;
4 | /**
5 | * 基金-客戶端(外觀模式)
6 | * 外觀模式將
7 | * @author Yan
8 | *
9 | */
10 | public class FundClient {
11 | public static void main(String[] args) {
12 | Fund fund = new Fund();
13 | fund.buyFund();
14 | fund.sellFund();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/client/c13/builder/PersonBuilderClient.java:
--------------------------------------------------------------------------------
1 | package c13.builder;
2 |
3 | import c13.builder.GundamBuilder;
4 | import c13.builder.LinePersonBuilder;
5 | import c13.builder.PersonDirector;
6 |
7 | /**
8 | * 畫小人-客戶端(建造者模式)
9 | * builder pattern 與 factory pattern的差異處
10 | * factory pattern 關注一個物件如何產生
11 | * builder pattern 關注一個由各種零組件組合的物件如何產生
12 | * @author Yan
13 | *
14 | */
15 | public class PersonBuilderClient {
16 | public static void main(String[] args) {
17 | PersonDirector pd = new PersonDirector();
18 |
19 | // director 用 createPersonFromLeg 從腳到頭畫一個線條人
20 | LinePersonBuilder lpb = new LinePersonBuilder();
21 | pd.setPersonBuilder(lpb);
22 | pd.createPersonFromLeg();
23 |
24 | System.out.println();
25 |
26 | // director 用 createPersonFromHead 從頭到腳畫一個線鋼彈
27 | GundamBuilder gb = new GundamBuilder();
28 | pd.setPersonBuilder(gb);
29 | pd.createPersonFromHead();
30 |
31 |
32 |
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/client/c14/observer/BossNotifyClient.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 |
3 | import c14.observer.Boss;
4 | import c14.observer.NBAObserver;
5 | import c14.observer.Observer;
6 | import c14.observer.Secretary;
7 | import c14.observer.StockObserver;
8 | import c14.observer.Subject;
9 |
10 | /**
11 | * 老闆回來通知-客戶端(觀察者模式)
12 | * @author Yan
13 | *
14 | */
15 | public class BossNotifyClient {
16 | public static void main(String[] args) {
17 | Subject boss = new Boss();
18 |
19 |
20 | Subject xiaoMei = new Secretary();
21 |
22 | Observer sob = new StockObserver("小股民", xiaoMei);
23 | Observer loser = new NBAObserver("NBA魯什", xiaoMei);
24 | // 沒人通知的情況下,小員工直接被老闆抓包
25 | System.out.println("小股民看股票中,NBA魯什看NBA中---老闆突然回來了");
26 | boss.attach(sob);
27 | boss.attach(loser);
28 | boss.notifyObserver("上班不上班,等等來辦公室找我");
29 |
30 | System.out.println("=============拜託櫃台小姐通知老闆回來了=============");
31 | xiaoMei.attach(sob);
32 | xiaoMei.attach(loser);
33 | // 報明牌失準,小美表示不想通知小股民了
34 | xiaoMei.detach(sob);
35 | xiaoMei.notifyObserver("老闆回來拉!!!");
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/client/c15/abstractFactory/DaoClient.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | import c15.abstractFactory.Department;
4 | import c15.abstractFactory.IDeptDao;
5 | import c15.abstractFactory.IFactory;
6 | import c15.abstractFactory.IUserDao;
7 | import c15.abstractFactory.OracleDaoFactory;
8 | import c15.abstractFactory.SqlServerDaoFactory;
9 | import c15.abstractFactory.User;
10 |
11 | /**
12 | * 資料庫操作DAO-客戶端(抽象工廠模式)
13 | * 工廠模式中毎一個產品都要有專門的工廠來生產
14 | * 在抽象工廠模式中,將同族系(例如說部門-員工)的產品集中由一個工廠生產,因此抽像工廠製造的不是一種產品,而是生成一組產品
15 | * @author Yan
16 | *
17 | */
18 | public class DaoClient {
19 | public static void main(String[] args) {
20 | //取得存取oracle的Dao
21 | IFactory factory = new OracleDaoFactory();
22 | IUserDao userDao = factory.createUserDao();
23 | IDeptDao deptDao = factory.createDeptDao();
24 |
25 | userDao.insert(new User(1,""));
26 | userDao.getUser(1);
27 |
28 | deptDao.insert(new Department(2,""));
29 | deptDao.getDept(2);
30 |
31 | System.out.println();
32 |
33 | //換成存取 sql server
34 | factory = new SqlServerDaoFactory();
35 | userDao = factory.createUserDao();
36 | deptDao = factory.createDeptDao();
37 | userDao.insert(new User(111,""));
38 | userDao.getUser(111);
39 |
40 | deptDao.insert(new Department(222,""));
41 | deptDao.getDept(222);
42 |
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/client/c16/state/StateClient.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 |
3 | import c16.state.Work;
4 |
5 | /**
6 | * 上班狀態-客戶端(狀態模式)
7 | * @author Yan
8 | *
9 | */
10 | public class StateClient {
11 | public static void main(String[] args) {
12 | Work emergencyProject = new Work();
13 | emergencyProject.setHour(9);
14 | emergencyProject.writeProgram();
15 | emergencyProject.setHour(10);
16 | emergencyProject.writeProgram();
17 | emergencyProject.setHour(11);
18 | emergencyProject.writeProgram();
19 | emergencyProject.setHour(12);
20 | emergencyProject.writeProgram();
21 | emergencyProject.setHour(15);
22 | emergencyProject.writeProgram();
23 | emergencyProject.setFinish(true);
24 |
25 | emergencyProject.setHour(18);
26 | emergencyProject.writeProgram();
27 |
28 | emergencyProject.setHour(19);
29 | emergencyProject.writeProgram();
30 | emergencyProject.setHour(21);
31 | emergencyProject.writeProgram();
32 |
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/client/c17/adapter/TranslatorClient.java:
--------------------------------------------------------------------------------
1 | package c17.adapter;
2 |
3 | import c17.adapter.CenterPlayer;
4 | import c17.adapter.Player;
5 | import c17.adapter.Translator;
6 |
7 | /**
8 | * NBA翻譯-客戶端(轉接器模式)
9 | * @author Yan
10 | *
11 | */
12 | public class TranslatorClient {
13 | public static void main(String[] args) {
14 | Player b = new CenterPlayer("bill");
15 | b.attack();
16 |
17 | Player ym = new Translator("姚明");
18 | ym.attack();
19 | ym.defense();
20 |
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/client/c18/memento/GameRoleClient.java:
--------------------------------------------------------------------------------
1 | package c18.memento;
2 |
3 | import c18.memento.GameRole;
4 | import c18.memento.RoleStateCareTaker;
5 |
6 | /**
7 | * 打魔王遊戲-客戶端(備忘錄模式)
8 | * @author Yan
9 | *
10 | */
11 | public class GameRoleClient {
12 |
13 | public static void main(String[] args) {
14 | // boss一開始的狀態
15 | GameRole boss = new GameRole();
16 | boss.stateDisplay();
17 |
18 |
19 | // 使用複雜的神秘小技巧,可以降低boss攻擊力
20 | System.out.println("使用複雜的神秘小技巧");
21 | boss.setAtk(60);
22 |
23 | // 趕快存檔
24 | RoleStateCareTaker rsc = new RoleStateCareTaker();
25 | rsc.setSave(boss.save());
26 | boss.stateDisplay();
27 |
28 |
29 | // 開打了
30 | boss.fight();
31 | boss.stateDisplay();
32 |
33 | // 隊伍血沒先回滿,倒了一半,快讀取剛才的存檔
34 | boss.load(rsc.getSave());
35 | System.out.println("不行不行,讀檔重打");
36 | boss.stateDisplay();
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/client/c19/composite/CompanyClient.java:
--------------------------------------------------------------------------------
1 | package c19.composite;
2 | /**
3 | * 公司組織-客戶端(組合模式)
4 | * @author Yan
5 | *
6 | */
7 | public class CompanyClient {
8 | public static void main(String[] args) {
9 | Company root = new ConcreteCompany("月球總部");
10 | root.add(new HRDept("總部人力資源處"));
11 | root.add(new FinaneDept("總部財務處"));
12 |
13 | Company mars = new ConcreteCompany("火星分部");
14 | mars.add(new HRDept("火星分部人力資源處"));
15 | mars.add(new FinaneDept("火星分部財務處"));
16 | root.add(mars);
17 |
18 | Company m1 = new ConcreteCompany("火衛1號辦事處");
19 | m1.add(new HRDept("火衛1號辦事處人事室"));
20 | m1.add(new FinaneDept("火衛1號辦事處會計室"));
21 | mars.add(m1);
22 |
23 | Company m2 = new ConcreteCompany("火衛2號辦事處");
24 | m2.add(new HRDept("火衛2號辦事處人事室"));
25 | m2.add(new FinaneDept("火衛2號辦事處會計室"));
26 | mars.add(m2);
27 |
28 | System.out.println("結構圖:");
29 | root.display(1);
30 | System.out.println("職責表");
31 | root.lineOfDuty();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/client/c20/iterator/IteratorClient.java:
--------------------------------------------------------------------------------
1 | package c20.iterator;
2 | /**
3 | * 公車買票-客戶端(迭代器模式)
4 | * @author Yan
5 | *
6 | */
7 | public class IteratorClient {
8 | public static void main(String[] args) {
9 | Aggregate a = new ConcreteAggregate<>();
10 | a.add("鳥哥");
11 | a.add("蔡蟲");
12 | a.add("吉他");
13 | a.add("內部員工");
14 | a.add("小偷");
15 |
16 | Iterator it = new ConcreteIterator<>(a);
17 | while(it.isDone()){
18 | System.out.println(it.currentItem() + " 買票!");
19 | it.next();
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/client/c21/singleton/SingletonClient.java:
--------------------------------------------------------------------------------
1 | package c21.singleton;
2 |
3 | /**
4 | * singleton客戶端(單例模式)
5 | * @author Yan
6 | *
7 | */
8 | public class SingletonClient {
9 | public static void main(String[] args) {
10 | Singleton s1 = Singleton.getInstance();
11 | Singleton s2 = Singleton.getInstance();
12 |
13 | if(s1 == s2){
14 | System.out.println("兩個是同一個物件");
15 | };
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/client/c22/bridge/HandsetClient.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 | /**
3 | * 手機軟體-客戶端(橋接模式)
4 | * @author Yan
5 | *
6 | */
7 | public class HandsetClient {
8 | public static void main(String[] args) {
9 | HandsetBrand hb;
10 | //M牌手機
11 | hb = new HandsetBrandM();
12 | hb.setHandsetSoft(new HandsetGame());
13 | hb.run();
14 | hb.setHandsetSoft(new HandsetContactList());
15 | hb.run();
16 | System.out.println();
17 |
18 | //N牌手機
19 | hb = new HandsetBrandN();
20 | hb.setHandsetSoft(new HandsetGame());
21 | hb.run();
22 | hb.setHandsetSoft(new HandsetContactList());
23 | hb.run();
24 |
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/client/c23/command/BarbecueClient.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 | /**
3 | * 燒烤店-客戶端(命令模式)
4 | * @author Yan
5 | *
6 | */
7 | public class BarbecueClient {
8 |
9 | public static void main(String[] args) {
10 | //開店前準備
11 | Barbecuer boy = new Barbecuer();
12 | Command bakeMutton = new BakeMutonCommand(boy);
13 | Command bakeChicken = new BakeChickenWingCommand(boy);
14 | Waiter girl = new Waiter();
15 |
16 | //開始營業 客戶點餐
17 | girl.setOrder(bakeMutton);
18 | girl.setOrder(bakeMutton);
19 | girl.setOrder(bakeChicken);
20 | girl.setOrder(bakeChicken);
21 | // 雞翅賣完
22 | girl.setOrder(bakeChicken);
23 | girl.setOrder(bakeMutton);
24 | // 取消一個雞翅
25 | girl.cancelOrder(bakeChicken);
26 |
27 | girl.setOrder(bakeChicken);
28 |
29 | // 雞翅又賣完了
30 | girl.setOrder(bakeChicken);
31 | girl.setOrder(bakeMutton);
32 | System.out.println();
33 | // 點餐完成,烤肉
34 | girl.notifyBaker();
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/client/c24/ChainOfResponsibility/ManagerClient.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 | /**
3 | * 公司請假,加薪簽核-客戶端(職責鏈模式)
4 | * @author Yan
5 | *
6 | */
7 | public class ManagerClient {
8 |
9 |
10 | public static void main(String[] args) {
11 | Manager pm = new CommonManager("PM經理");
12 | Manager gl = new Majordomo("總監");
13 | Manager gm = new GeneralManager("總經理");
14 |
15 | // 設定上級,可隨實際需求更改
16 | pm.setSuperior(gl);
17 | gl.setSuperior(gm);
18 |
19 | ApplyRequest request = new ApplyRequest();
20 | request.setRequestType("請假");
21 | request.setRequestContent("小菜請假");
22 | request.setRequestCount(2);
23 | pm.apply(request);
24 |
25 | request.setRequestCount(4);
26 | pm.apply(request);
27 |
28 | request.setRequestType("加薪");
29 | request.setRequestContent("小菜加薪");
30 | request.setRequestCount(2000);
31 | pm.apply(request);
32 |
33 | request.setRequestCount(900);
34 | pm.apply(request);
35 |
36 |
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/client/c25/mediator/UniteNationsClient.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 | /**
3 | * 聯合國-客戶端(中介者模式)
4 | * @author Yan
5 | *
6 | */
7 | public class UniteNationsClient {
8 |
9 |
10 | public static void main(String[] args) {
11 | UNSC unsc = new UNSC();
12 | USA c1 = new USA(unsc);
13 | Iraq c2 = new Iraq(unsc);
14 |
15 | unsc.setCountryA(c1);
16 | unsc.setCountryB(c2);
17 |
18 | c1.declare("快把海珊交出來");
19 | c2.declare("海珊昨天被你們炸死了");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/client/c26/flyweight/WebsiteClient.java:
--------------------------------------------------------------------------------
1 | package c26.flyweight;
2 |
3 | import c26.flywight.User;
4 | import c26.flywight.WebSiteFactory;
5 | import c26.flywight.Website;
6 |
7 | /**
8 | * 網站服務-客戶端(享元模式)
9 | * @author Yan
10 | *
11 | */
12 | public class WebsiteClient {
13 |
14 | public static void main(String[] args) {
15 | WebSiteFactory f = new WebSiteFactory();
16 |
17 | //產品展示網站有兩個,但是他們其實只是共用一個物件
18 | Website pd = f.getWebsiteCategory("產品展示");
19 | pd.use(new User("小菜"));
20 | Website pd2 = f.getWebsiteCategory("產品展示");
21 | pd2.use(new User("大鳥"));
22 | Website blog = f.getWebsiteCategory("部落格");
23 | blog.use(new User("部落客"));
24 | Website ts = f.getWebsiteCategory("教學網站");
25 | ts.use(new User("陳老師"));
26 |
27 | System.out.println("目前共有" + f.getWebsiteCount() + "種網站");
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/client/c27/interpreter/ContextPlayClient.java:
--------------------------------------------------------------------------------
1 | package c27.interpreter;
2 | /**
3 | * 樂譜解析-客戶端(解譯器模式)
4 | * @author Yan
5 | *
6 | */
7 | public class ContextPlayClient {
8 | public static void main(String[] args) {
9 | PlayContext context = new PlayContext();
10 | context.setText("O 2 E 0.5 G 0.5 A 3 ");
11 |
12 | Expression expression = null;
13 |
14 | while(context.getText().length() > 0){
15 | String str = context.getText().substring(0, 1);
16 | if("O".equals(str)){
17 | expression = new Scale();
18 | } else {
19 | expression = new Note();
20 | }
21 |
22 | expression.interpret(context);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/client/c28/visitor/PersonActionClient.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 | /**
3 | * 男人女人對比-客戶端(拜訪者模式)
4 | * @author Yan
5 | *
6 | */
7 | public class PersonActionClient {
8 | public static void main(String[] args) {
9 | ObjectStructure os = new ObjectStructure();
10 | os.attach(new Man());
11 | os.attach(new Woman());
12 |
13 | Action success = new Success();
14 | os.display(success);;
15 |
16 | Action failure = new Failing();
17 | os.display(failure);;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/Calculator.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 毎一種計算邏輯(+,-,*,/)各自獨立抽出一個"計算class",Calculator class規範"計算class"應該有哪些方法
5 | * @author Yan
6 | *
7 | */
8 | public abstract class Calculator {
9 | protected int numberA = 0;
10 | protected int numberB = 0;
11 |
12 | public void setNumber(int a, int b){
13 | numberA = a;
14 | numberB = b;
15 | }
16 |
17 | /**
18 | * 這個方法需要被overwrite,計算的方法請在這邊實作
19 | * @return
20 | */
21 | public abstract int getResult();
22 | }
23 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalculatorA.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 簡單的計算機,只留下計算(業物邏輯)的部分。UI介面顯示則交由client端(CalculatorTest)處理
5 | * 優點是開發迅速。
6 | * 缺點是如果要新增計算方法,例如說新增a^b的計算方法,
7 | * 這樣就要進來修改計算邏輯的程式,不符合開放-關閉的開發模式。
8 | * 如果將+,-,*,/這些方法各字抽出成為一個運算類別,
9 | * 這樣開發人員要新增計算方法只要新增類別就可以,不會也不需要看到+,-,*,/這些運算類別裡面寫什麼
10 | * @author Yan
11 | */
12 | public class CalculatorA {
13 | private static int result;
14 |
15 | /**
16 | * 計算方法,輸入數字a,b,運算方法operator,進行相對應的計算
17 | * @param a
18 | * @param b
19 | * @param operate
20 | * @return
21 | * @throws Exception
22 | */
23 | public int calculate(Integer a, Integer b, char operator) throws Exception{
24 | switch(operator){
25 | case '+' : result = a+b; break;
26 | case '-' : result = a-b; break;
27 | case '*' : result = a*b; break;
28 | case '/' : result = a/b; break;
29 | default : throw new Exception("輸入錯誤");
30 | }
31 | return result;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalculatorFactory.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * SimpleFactory Pattern
5 | * 使用Calculator Factory來產生對應的計算類別
6 | * 缺點是程式碼被拆的很散,不是適合簡單的小功能
7 | * 優點是容易擴充與維護,因為毎個計算類別都是獨立的
8 | * 因此寫程式的人只要專注在一個計算類別是就好
9 | * 要擴充時也只要新增類別,並且來這個SimpleFactory增加switch選相即可
10 | * @author Yan
11 | *
12 | */
13 | public class CalculatorFactory {
14 |
15 |
16 | public static Calculator getCalculator(char operator) throws Exception{
17 | Calculator calculator = null;
18 | switch(operator){
19 | case '+' : calculator = new CalulatorAdd(); break;
20 | case '-' : calculator = new CalulatorSub(); break;
21 | case '*' : calculator = new CalulatorMul(); break;
22 | case '/' : calculator = new CalulatorDiv(); break;
23 | default : throw new Exception("輸入錯誤");
24 | }
25 |
26 | return calculator;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalulatorAdd.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 加法計算
5 | * @author Yan
6 | *
7 | */
8 | public class CalulatorAdd extends Calculator {
9 | @Override
10 | public int getResult() {
11 | return numberA+numberB;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalulatorDiv.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 除法計算
5 | * @author Yan
6 | *
7 | */
8 | public class CalulatorDiv extends Calculator {
9 | @Override
10 | public int getResult() {
11 | return numberA/numberB;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalulatorMul.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 乘法計算
5 | * @author Yan
6 | *
7 | */
8 | public class CalulatorMul extends Calculator {
9 | @Override
10 | public int getResult() {
11 | return numberA*numberB;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/c01/simpleFactory/CalulatorSub.java:
--------------------------------------------------------------------------------
1 | package c01.simpleFactory;
2 |
3 | /**
4 | * 減法計算
5 | * @author Yan
6 | *
7 | */
8 | public class CalulatorSub extends Calculator {
9 | @Override
10 | public int getResult() {
11 | return numberA-numberB;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/c02/strategy/CashContext.java:
--------------------------------------------------------------------------------
1 | package c02.strategy;
2 |
3 | import c02.strategy.simpleFactory.CashSuper;
4 |
5 | public class CashContext {
6 | private CashSuper cs;
7 |
8 | public CashContext(CashSuper cs){
9 | this.cs = cs;
10 | }
11 |
12 | public int GetResult(int money){
13 | return cs.acceptCash(money);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/c02/strategy/CashContextPro.java:
--------------------------------------------------------------------------------
1 | package c02.strategy;
2 |
3 | import c02.strategy.simpleFactory.CashDiscount;
4 | import c02.strategy.simpleFactory.CashNomal;
5 | import c02.strategy.simpleFactory.CashReturn;
6 | import c02.strategy.simpleFactory.CashSuper;
7 |
8 | public class CashContextPro {
9 | private CashSuper cs;
10 |
11 | public CashContextPro(String type){
12 | switch(type) {
13 | case "normal": cs = new CashNomal(); break;
14 | case "discount": cs = new CashDiscount(0.8); break;
15 | case "return": cs =new CashReturn(300,100);break;
16 | }
17 | }
18 |
19 | public int GetResult(int money){
20 | return cs.acceptCash(money);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/c02/strategy/simpleFactory/CashDiscount.java:
--------------------------------------------------------------------------------
1 | package c02.strategy.simpleFactory;
2 |
3 | public class CashDiscount extends CashSuper{
4 | private double discount ;
5 |
6 | @SuppressWarnings("unused")
7 | private CashDiscount(){};
8 |
9 | /**
10 | * 建立本類別時一定要傳入折扣
11 | * @param discount
12 | */
13 | public CashDiscount(double discount){
14 | this.discount = discount;
15 | }
16 |
17 | @Override
18 | /**
19 | * 打折收費,收費 = 原價*折扣
20 | */
21 | public int acceptCash(int money) {
22 | return (int) Math.round(money*discount);
23 | }
24 |
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/c02/strategy/simpleFactory/CashFactory.java:
--------------------------------------------------------------------------------
1 | package c02.strategy.simpleFactory;
2 |
3 | public class CashFactory{
4 |
5 | /**
6 | * 收費方式工廠,根據傳入的參數決定要建立出哪種收費模式
7 | */
8 | public static CashSuper createCashAccept(String type) {
9 | CashSuper cs = null;
10 | switch(type) {
11 | case "normal": cs = new CashNomal(); break;
12 | case "discount85": cs = new CashDiscount(0.85); break;
13 | case "return300n100": cs = new CashReturn(300,100);break;
14 | }
15 | return cs;
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/c02/strategy/simpleFactory/CashNomal.java:
--------------------------------------------------------------------------------
1 | package c02.strategy.simpleFactory;
2 |
3 | public class CashNomal extends CashSuper{
4 | @Override
5 | /**
6 | * 正常收費,應該收多少錢就收多少錢
7 | */
8 | public int acceptCash(int money) {
9 | return money;
10 | }
11 |
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/c02/strategy/simpleFactory/CashReturn.java:
--------------------------------------------------------------------------------
1 | package c02.strategy.simpleFactory;
2 |
3 | public class CashReturn extends CashSuper{
4 | private double moneyCoundition;
5 | private double moneyReturn;
6 |
7 | public CashReturn(double moneyCoundition, double moneyReturn){
8 | this.moneyCoundition = moneyCoundition;
9 | this.moneyReturn = moneyReturn;
10 | }
11 |
12 | @Override
13 | /**
14 | * 紅利收費,利如說滿300送100
15 | */
16 | public int acceptCash(int money) {
17 | int result = money;
18 |
19 | // 收的錢比設定的條件還大,扣掉紅利優惠
20 | if(money > moneyCoundition){
21 | result = (int) (money - Math.floor(money/moneyCoundition)*moneyReturn);
22 | }
23 | return result;
24 | }
25 |
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/c02/strategy/simpleFactory/CashSuper.java:
--------------------------------------------------------------------------------
1 | package c02.strategy.simpleFactory;
2 |
3 | /**
4 | * 商場收銀軟體,根據客戶所購買的商品與數量收費
5 | * @author Yan
6 | *
7 | */
8 | public abstract class CashSuper {
9 | /**
10 | * 各種收費規則的抽像類別,利如正常收費則acceptCash要回傳的就是原價
11 | * @param money
12 | * @return
13 | */
14 | public abstract int acceptCash(int money);
15 | }
16 |
--------------------------------------------------------------------------------
/src/c06/decorator/Finery.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 服飾類別
4 | * @author Yan
5 | *
6 | */
7 | public class Finery extends Person {
8 | protected Person component;
9 | public Finery(){
10 |
11 | }
12 |
13 | public Finery(Person p){
14 | this.component = p;
15 | }
16 |
17 | //打扮
18 | public void decorate(Person p){
19 | this.component = p;
20 | }
21 |
22 | @Override
23 | public void show() {
24 | if(component != null){
25 | component.show();
26 | }
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/src/c06/decorator/Person.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 一開始還沒裝扮的人
4 | * @author Yan
5 | *
6 | */
7 | public class Person {
8 | private String name;
9 | public Person(){
10 |
11 | }
12 |
13 | public Person(String name){
14 | this.name = name;
15 | }
16 |
17 | public void show(){
18 | System.out.println("裝扮的" + name);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/c06/decorator/Sneakers.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 服飾類別
4 | * @author Yan
5 | *
6 | */
7 | public class Sneakers extends Finery {
8 | public Sneakers(){
9 |
10 | }
11 |
12 | public Sneakers(Finery p) {
13 | super(p);
14 | }
15 | protected Finery component;
16 | @Override
17 | public void show() {
18 | System.out.print("球鞋 ");
19 | super.show();
20 | }
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/src/c06/decorator/TShirts.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 服飾類別
4 | * @author Yan
5 | *
6 | */
7 | public class TShirts extends Finery {
8 | public TShirts(Finery p) {
9 | super(p);
10 | }
11 | public TShirts() {
12 | }
13 | protected Finery component;
14 | @Override
15 | public void show() {
16 | System.out.print("大T ");
17 | super.show();
18 | }
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/src/c06/decorator/Trouser.java:
--------------------------------------------------------------------------------
1 | package c06.decorator;
2 | /**
3 | * 服飾類別
4 | * @author Yan
5 | *
6 | */
7 | public class Trouser extends Finery {
8 | public Trouser(Finery p) {
9 | super(p);
10 | }
11 | public Trouser() {
12 | }
13 | protected Finery component;
14 | @Override
15 | public void show() {
16 | System.out.print("垮褲 ");
17 | super.show();
18 | }
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/src/c07/proxy/IGiveGift.java:
--------------------------------------------------------------------------------
1 | package c07.proxy;
2 |
3 | /**
4 | * 介面,定義各種送禮行為
5 | *
6 | */
7 | public interface IGiveGift {
8 | public void giveDolls();
9 | public void giveFlowers();
10 | public void giveChocolate();
11 | }
12 |
--------------------------------------------------------------------------------
/src/c07/proxy/Proxy.java:
--------------------------------------------------------------------------------
1 | package c07.proxy;
2 |
3 | public class Proxy implements IGiveGift{
4 | private SchoolGirl mm; //收禮物的女學生
5 | private Pursuit orgPursuit; //被代理的人
6 | private String name; //代理人的姓名
7 |
8 | /**
9 | *
10 | * @param ps 被代理的人
11 | * @param proxyName 代理人的姓名
12 | */
13 | public Proxy(Pursuit ps, String proxyName){
14 | this.orgPursuit = ps;
15 | this.name = proxyName;
16 | this.mm = ps.getSchoolGirl();
17 | }
18 |
19 | @Override
20 | public void giveDolls() {
21 | System.out.println(this.name + " 幫 " + orgPursuit.name + " 送洋娃娃給 " + mm.name);
22 | }
23 |
24 | @Override
25 | public void giveFlowers() {
26 | System.out.println(this.name + " 幫 " + orgPursuit.name + " 送鮮花給 " + mm.name);
27 | }
28 |
29 | @Override
30 | public void giveChocolate() {
31 | System.out.println(this.name + " 幫 " + orgPursuit.name + " 送巧克力給 " + mm.name);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/c07/proxy/Pursuit.java:
--------------------------------------------------------------------------------
1 | package c07.proxy;
2 |
3 | /**
4 | *
5 | * 追求者類別,實做各種送禮物行為
6 | *
7 | */
8 | public class Pursuit implements IGiveGift{
9 | private SchoolGirl mm;
10 | public String name;
11 |
12 |
13 | public Pursuit(String name){
14 | this.name = name;
15 | }
16 |
17 | @Override
18 | public void giveDolls() {
19 | System.out.println(this.name + " 送洋娃娃給 " + mm.name);
20 | }
21 |
22 | @Override
23 | public void giveFlowers() {
24 | System.out.println(this.name + " 送鮮花給 " + mm.name);
25 | }
26 |
27 | @Override
28 | public void giveChocolate() {
29 | System.out.println(this.name + " 送巧克力給 " + mm.name);
30 | }
31 |
32 | // 要送禮物給哪個女學生
33 | public void setSchoolGirl(SchoolGirl mm){
34 | this.mm = mm;
35 | }
36 |
37 | public SchoolGirl getSchoolGirl(){
38 | return this.mm;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/c07/proxy/SchoolGirl.java:
--------------------------------------------------------------------------------
1 | package c07.proxy;
2 |
3 | /**
4 | * 接受禮物的女學生
5 | */
6 | public class SchoolGirl {
7 | public String name;
8 | }
9 |
--------------------------------------------------------------------------------
/src/c08/factory/IFactory.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | * 南丁格爾工廠
5 | * @author Yan
6 | *
7 | */
8 | public interface IFactory {
9 | public Nightingale CreateNightingale();
10 | }
11 |
--------------------------------------------------------------------------------
/src/c08/factory/Nightingale.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | *
5 | * 南丁格爾類別,有各種幫助老人起居生活的方法
6 | *
7 | */
8 | public class Nightingale {
9 | public void sweep(){
10 | System.out.println("掃地");
11 | }
12 | public void wash(){
13 | System.out.println("洗衣");
14 | }
15 | public void buyRice(){
16 | System.out.println("買米");
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/c08/factory/SimpleFactory.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | * 南丁格爾服務團simple factory
5 | * @author Yan
6 | *
7 | */
8 | public class SimpleFactory {
9 | public static Nightingale CreatNightingale(String type) {
10 | Nightingale nt = null;
11 | switch(type){
12 | case "undergraduate":
13 | System.out.println("熱心大學生行前教育中...");
14 | nt = new Undergraduate();
15 | System.out.println("熱心大學生出發服務老人");
16 | break;
17 | case "volunteer":
18 | System.out.println("社區義工訓練中...");
19 | nt = new Volunteer();
20 | System.out.println("社區義工待命中");
21 | break;
22 | }
23 |
24 | return nt;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/c08/factory/Undergraduate.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | *
5 | * 希望以南丁格爾精神服務社區老人的熱心大學生類別
6 | *
7 | */
8 | public class Undergraduate extends Nightingale{
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/src/c08/factory/UndergraduateFactory.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | * 產生熱心大學生的社團(工廠)
5 | * @author Yan
6 | *
7 | */
8 | public class UndergraduateFactory implements IFactory {
9 |
10 | @Override
11 | public Nightingale CreateNightingale() {
12 | System.out.println("義工社熱心大學生行前教育...");
13 | System.out.println("行前教育完成");
14 | return new Undergraduate();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/c08/factory/Volunteer.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | *
5 | * 希望以南丁格爾精神服務社區老人的社區義工
6 | *
7 | */
8 | public class Volunteer extends Nightingale{
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/src/c08/factory/VolunteerFactory.java:
--------------------------------------------------------------------------------
1 | package c08.factory;
2 |
3 | /**
4 | * 產生社區義工的義工班(工廠)
5 | * @author Yan
6 | *
7 | */
8 | public class VolunteerFactory implements IFactory {
9 |
10 | @Override
11 | public Nightingale CreateNightingale() {
12 | System.out.println("社區義工教育訓練...");
13 | System.out.println("教育訓練完成");
14 | return new Volunteer();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/c09/prototype/Resume.java:
--------------------------------------------------------------------------------
1 | package c09.prototype;
2 |
3 | /**
4 | * 履歷
5 | * @author Yan
6 | *
7 | */
8 | public class Resume implements Cloneable{
9 | private String name;
10 | private String age;
11 | private String education;
12 | private WorkExperience work;
13 |
14 |
15 | public Resume(String name){
16 | this.name = name;
17 | work = new WorkExperience();
18 | }
19 |
20 | private Resume(WorkExperience work) throws CloneNotSupportedException{
21 | this.work = (WorkExperience) work.clone();
22 | }
23 |
24 | public void setProfile(String age, String education){
25 | this.age = age;
26 | this.education = education;
27 | }
28 |
29 | public void setWorkExperience(String workDate, String company){
30 | work.setWorkDate(workDate);
31 | work.setCompany(company);
32 | }
33 |
34 | @Override
35 | public Object clone() throws CloneNotSupportedException {
36 | // 直接使用 super.clone(),不會得到新的 WorkExperinece實體
37 | Resume clone = new Resume(this.work);
38 | clone.name = this.name;
39 | clone.age = this.age;
40 | clone.education = this.education;
41 | return clone;
42 | }
43 |
44 |
45 | public void display(){
46 | System.out.printf("%s %s %s \n", name,education,age);
47 | System.out.printf("工作經歷: %s %s \n", work.getWorkDate(), work.getCompany());
48 | }
49 | }
50 |
51 |
52 | /**
53 | * 履歷中的工作經驗
54 | * @author Yan
55 | *
56 | */
57 | class WorkExperience implements Cloneable {
58 | private String workDate;
59 | private String company;
60 | public String getCompany() {
61 | return company;
62 | }
63 | public void setCompany(String company) {
64 | this.company = company;
65 | }
66 | public String getWorkDate() {
67 | return workDate;
68 | }
69 | public void setWorkDate(String workDate) {
70 | this.workDate = workDate;
71 | }
72 |
73 | @Override
74 | protected Object clone() throws CloneNotSupportedException {
75 | return super.clone();
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/c10/template/TestPaper.java:
--------------------------------------------------------------------------------
1 | package c10.template;
2 |
3 | /**
4 | * 考試卷,共用的題目先寫好做為template,其他會變動的部分交由子類別實作
5 | * @author Yan
6 | *
7 | */
8 | public abstract class TestPaper {
9 | /**
10 | * 列印整張考卷的題目與做答結果
11 | * @param question
12 | * @param answer
13 | */
14 | public void display(){
15 | System.out.println(answerA() + " " + QuestionA());
16 | System.out.println(answerB() + " " + QuestionB());
17 | System.out.println(answerC() + " " + QuestionC());
18 | };
19 |
20 | /**
21 | * @return 這張考卷題目1 作答的答案
22 | */
23 | protected abstract String answerA();
24 | /**
25 | * @return 這張考卷題目2 作答的答案
26 | */
27 | protected abstract String answerB();
28 | /**
29 | * @return 這張考卷題目3作答的答案
30 | */
31 | protected abstract String answerC();
32 |
33 | private String QuestionA(){
34 | return "1.楊過的玄鐵劍材質可能是[]? a.球磨鑄鐵 b.馬蹄鐵 c.高速合金鋼 d.碳纖維";
35 | }
36 | private String QuestionB(){
37 | return "2.情花谷的情花被剷光了會造成[]? a.使這種植物不會再害人 b.使一種稀有植物滅絕 c.破壞當地生態圈 d.造成當地沙漠化";
38 | }
39 | private String QuestionC(){
40 | return "3.藍鳳凰下讀使人嘔吐不止,應該用什麼藥物治療[]? a.阿斯匹靈 b.牛黃解毒片 c.大量生牛奶 d.以上皆錯";
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/c10/template/TestPaperA.java:
--------------------------------------------------------------------------------
1 | package c10.template;
2 |
3 | public class TestPaperA extends TestPaper{
4 |
5 | @Override
6 | protected String answerA() {
7 | return "b";
8 | }
9 |
10 | @Override
11 | protected String answerB() {
12 | return "d";
13 | }
14 |
15 | @Override
16 | protected String answerC() {
17 | return "c";
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/c10/template/TestPaperB.java:
--------------------------------------------------------------------------------
1 | package c10.template;
2 |
3 | public class TestPaperB extends TestPaper{
4 |
5 | @Override
6 | protected String answerA() {
7 | return "c";
8 | }
9 |
10 | @Override
11 | protected String answerB() {
12 | return "a";
13 | }
14 |
15 | @Override
16 | protected String answerC() {
17 | return "a";
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/c12/facade/Fund.java:
--------------------------------------------------------------------------------
1 | package c12.facade;
2 |
3 | /**
4 | * 幫你操作股票的基金類別
5 | * @author Yan
6 | *
7 | */
8 | public class Fund {
9 | Stock stock;
10 | Realty realty;
11 | Nationaldept dept;
12 |
13 | public Fund(){
14 | stock = new Stock();
15 | realty = new Realty();
16 | dept = new Nationaldept();
17 | }
18 |
19 | /**
20 | * 基金操做投資組合
21 | */
22 | public void buyFund(){
23 | stock.buy();
24 | realty.buy();
25 | dept.buy();
26 | };
27 |
28 | /**
29 | * 基金操做投資組合
30 | */
31 | public void sellFund(){
32 | stock.sell();
33 | realty.sell();
34 | dept.sell();
35 | };
36 | }
37 |
38 | /**
39 | * 股票類
40 | * @author Yan
41 | *
42 | */
43 | class Stock {
44 |
45 | public void buy(){
46 | System.out.println("買入股票");
47 | }
48 |
49 | public void sell(){
50 | System.out.println("賣出股票");
51 | }
52 |
53 | }
54 |
55 | /**
56 | * 國債類
57 | * @author Yan
58 | *
59 | */
60 | class Nationaldept {
61 |
62 | public void buy(){
63 | System.out.println("買入國債");
64 | }
65 |
66 | public void sell(){
67 | System.out.println("賣出國債");
68 | }
69 |
70 | }
71 |
72 | /**
73 | * 不動產類
74 | * @author Yan
75 | *
76 | */
77 | class Realty {
78 |
79 | public void buy(){
80 | System.out.println("買入不動產");
81 | }
82 |
83 | public void sell(){
84 | System.out.println("賣出不動產");
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/src/c13/builder/GundamBuilder.java:
--------------------------------------------------------------------------------
1 | package c13.builder;
2 |
3 | public class GundamBuilder extends PersonBuilder{
4 |
5 |
6 | @Override
7 | public void buildHead() {
8 | System.out.println("畫一個長橢圓做為頭");
9 | System.out.println("頭上兩條天線");
10 | System.out.println("畫眼睛,鼻子,嘴巴");
11 | }
12 |
13 | @Override
14 | public void buildBody() {
15 | System.out.println("畫一個長方型做為身體");
16 | System.out.println("畫鋼彈身體細部");
17 | System.out.println("畫身體後面的翅膀");
18 | }
19 |
20 | @Override
21 | public void buildLeftArm() {
22 | System.out.println("畫左手");
23 | System.out.println("..........裝配左手武器");
24 | }
25 |
26 | @Override
27 | public void buildRightArm() {
28 | System.out.println("畫右手");
29 | System.out.println("..........裝配右手武器");
30 | }
31 |
32 | @Override
33 | public void buildLeftLeg() {
34 | System.out.println("畫左腳,加上不會軟的膝蓋");
35 | }
36 |
37 | @Override
38 | public void buildRightLeg() {
39 | System.out.println("畫左腳,加上不會軟的膝蓋");
40 | }
41 |
42 | @Override
43 | public void buildFinish() {
44 | System.out.println("鋼彈X建造完成");
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/c13/builder/LinePersonBuilder.java:
--------------------------------------------------------------------------------
1 | package c13.builder;
2 |
3 | public class LinePersonBuilder extends PersonBuilder{
4 |
5 |
6 | @Override
7 | public void buildHead() {
8 | System.out.println("畫一個圓做為頭");
9 | }
10 |
11 | @Override
12 | public void buildBody() {
13 | System.out.println("畫一個正方型做為身體");
14 | }
15 |
16 | @Override
17 | public void buildLeftArm() {
18 | System.out.println("一條線表示左手");
19 | }
20 |
21 | @Override
22 | public void buildRightArm() {
23 | System.out.println("一條線表示右手");
24 | }
25 |
26 | @Override
27 | public void buildLeftLeg() {
28 | System.out.println("一條線表示左腳");
29 | }
30 |
31 | @Override
32 | public void buildRightLeg() {
33 | System.out.println("一條線表示右腳");
34 | }
35 |
36 | @Override
37 | public void buildFinish() {
38 | System.out.println("線條人建造完成");
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/c13/builder/PersonBuilder.java:
--------------------------------------------------------------------------------
1 | package c13.builder;
2 |
3 | /**
4 | * 小人建造器抽像類別,訂出要建造一個小人所需要的方法
5 | * @author Yan
6 | *
7 | */
8 | public abstract class PersonBuilder {
9 |
10 | /**
11 | * 畫一個小人的頭
12 | */
13 | public abstract void buildHead();
14 | /**
15 | * 畫一個小人的身體
16 | */
17 | public abstract void buildBody();
18 | /**
19 | * 畫一個小人的左手
20 | */
21 | public abstract void buildLeftArm();
22 | /**
23 | * 畫一個小人的右手
24 | */
25 | public abstract void buildRightArm();
26 | /**
27 | * 畫一個小人的左腳
28 | */
29 | public abstract void buildLeftLeg();
30 | /**
31 | * 畫一個小人的右腳
32 | */
33 | public abstract void buildRightLeg();
34 |
35 | /**
36 | * 宣告建造完成
37 | */
38 | public abstract void buildFinish();
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/src/c13/builder/PersonDirector.java:
--------------------------------------------------------------------------------
1 | package c13.builder;
2 |
3 | /**
4 | * 指揮如何建造小人的類別
5 | * @author Yan
6 | *
7 | */
8 | public class PersonDirector {
9 | private PersonBuilder pb;
10 | public void setPersonBuilder(PersonBuilder pb){
11 | this.pb = pb;
12 | }
13 |
14 | public void createPersonFromHead(){
15 | System.out.println("從頭往下畫");
16 | pb.buildHead();
17 | pb.buildBody();
18 | pb.buildLeftArm();
19 | pb.buildRightArm();
20 | pb.buildLeftLeg();
21 | pb.buildRightLeg();
22 | }
23 |
24 | public void createPersonFromLeg(){
25 | System.out.println("從腳開始往上畫");
26 | pb.buildLeftLeg();
27 | pb.buildRightLeg();
28 |
29 | pb.buildLeftArm();
30 | pb.buildRightArm();
31 |
32 | pb.buildBody();
33 | pb.buildHead();
34 |
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/c14/observer/Boss.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 | /**
3 | * 老闆也可以是一個通知者,只是被老闆通知上班別偷懶會很慘
4 | * @author Yan
5 | *
6 | */
7 | public class Boss extends Subject {
8 |
9 | @Override
10 | public void notifyObserver(String states) {
11 | for(Observer ob : list){
12 | ob.update(states);
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/c14/observer/NBAObserver.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 |
3 | /**
4 | * 上班看NBA的同事
5 | * @author Yan
6 | *
7 | */
8 | public class NBAObserver extends Observer{
9 |
10 | public NBAObserver(String name, Subject sub) {
11 | super(name, sub);
12 | }
13 |
14 | @Override
15 | public void update(String states) {
16 | System.out.println(states + "->" + name + " 把NBA關了!!");
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c14/observer/Observer.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 | /**
3 | * 定義各種不認真上班的同事,除了不物正業外,最重要的就是觀察通知者給的訊息,因此叫observer
4 | * @author Yan
5 | *
6 | */
7 | public abstract class Observer {
8 | protected String name;
9 | protected Subject sub;
10 | public Observer(String name,Subject sub){
11 | this.name = name;
12 | this.sub = sub;
13 | }
14 |
15 | public abstract void update(String status);
16 | }
17 |
--------------------------------------------------------------------------------
/src/c14/observer/Secretary.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 | /**
3 | * 櫃台秘書小妹,在門口看到老闆回來負責通知不務正業的同事
4 | * @author Yan
5 | *
6 | */
7 | public class Secretary extends Subject{
8 |
9 | @Override
10 | public void notifyObserver(String states) {
11 | for(Observer ob:list){
12 | ob.update(states);;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/c14/observer/StockObserver.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 |
3 | /**
4 | * 上班玩股票的同事
5 | * @author Yan
6 | *
7 | */
8 | public class StockObserver extends Observer{
9 |
10 | public StockObserver(String name, Subject sub) {
11 | super(name, sub);
12 | }
13 |
14 | @Override
15 | public void update(String states) {
16 | System.out.println(states + "->" + name + " 別再看股票行情了!!");
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c14/observer/Subject.java:
--------------------------------------------------------------------------------
1 | package c14.observer;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | /**
7 | * 通知者介面,負責通知那些不物正業的員工,老闆回來了
8 | * @author Yan
9 | *
10 | */
11 | public abstract class Subject {
12 | protected List list = new ArrayList<>();
13 |
14 | public void attach(Observer observer){
15 | list.add(observer);
16 | };
17 | public void detach(Observer observer){
18 | list.remove(observer);
19 | }
20 |
21 | public abstract void notifyObserver(String states);
22 | }
23 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/Department.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * table 定義的user類別
5 | * @author Yan
6 | *
7 | */
8 | public class Department {
9 | private int id;
10 | private String deptName;
11 |
12 | public Department(int id, String deptName){
13 | this.id = id;
14 | this.deptName = deptName;
15 | }
16 |
17 | public int getId() {
18 | return id;
19 | }
20 | public void setId(int id) {
21 | this.id = id;
22 | }
23 | public String getDeptName() {
24 | return deptName;
25 | }
26 | public void setDeptName(String deptName) {
27 | this.deptName = deptName;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/IDeptDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * 定義建造UserDao的工廠介面
5 | * @author Yan
6 | *
7 | */
8 | public interface IDeptDao {
9 | /**
10 | * 插入一筆dept到資料庫
11 | * @param dept
12 | */
13 | void insert(Department dept);
14 | /**
15 | * 使用id取出一筆dept資料
16 | * @param id
17 | * @return
18 | */
19 | Department getDept(int id);
20 | }
21 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/IFactory.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * 定義存取table方法的UserDao介面
5 | * @author Yan
6 | *
7 | */
8 | public interface IFactory {
9 | /**
10 | * 取得存取資料庫user資料的DAO
11 | * @return
12 | */
13 | IUserDao createUserDao();
14 |
15 | /**
16 | * 取得存取資料庫dept資料的DAO
17 | * @return
18 | */
19 | IDeptDao createDeptDao();
20 | }
21 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/IUserDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * 定義建造UserDao的工廠介面
5 | * @author Yan
6 | *
7 | */
8 | public interface IUserDao {
9 | /**
10 | * 插入一筆user到資料庫
11 | * @param user
12 | */
13 | void insert(User user);
14 | /**
15 | * 使用id取出一筆user資料
16 | * @param id
17 | * @return
18 | */
19 | User getUser(int id);
20 | }
21 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/OracleDaoFactory.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 | /**
3 | * 用來建立存取sql server資料的各種dao
4 | * @author Yan
5 | *
6 | */
7 | public class OracleDaoFactory implements IFactory{
8 |
9 | @Override
10 | public IUserDao createUserDao() {
11 | return new OracleUserDao();
12 | }
13 |
14 | @Override
15 | public IDeptDao createDeptDao() {
16 | return new OracleDeptDao();
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/OracleDeptDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 |
4 | /**
5 | * oracle資料庫存取dept資料表的Dao
6 | * @author Yan
7 | *
8 | */
9 | public class OracleDeptDao implements IDeptDao {
10 |
11 | @Override
12 | public void insert(Department dept) {
13 | System.out.println("在oracle資料庫插入一筆dept");
14 | }
15 |
16 | @Override
17 | public Department getDept(int id) {
18 | Department user = new Department(id,"");
19 | System.out.println("oracle資料庫取出Id為 " + id + " 的Department");
20 | return user;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/OracleUserDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * 存取oracle資料庫user資料的dao
5 | * @author Yan
6 | *
7 | */
8 | public class OracleUserDao implements IUserDao {
9 |
10 | @Override
11 | public void insert(User user) {
12 | System.out.println("在oracle資料庫插入一筆user");
13 | }
14 |
15 | @Override
16 | public User getUser(int id) {
17 | User user = new User(id,"");
18 | System.out.println("oracle資料庫取出Id為 " + id + " 的user");
19 | return user;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/SqlServerDaoFactory.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 | /**
3 | * 用來建立存取sql server資料的各種dao
4 | * @author Yan
5 | *
6 | */
7 | public class SqlServerDaoFactory implements IFactory{
8 |
9 | @Override
10 | public IUserDao createUserDao() {
11 | return new SqlServerUserDao();
12 | }
13 |
14 | @Override
15 | public IDeptDao createDeptDao() {
16 | return new SqlServerDeptDao();
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/SqlServerDeptDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * sql server資料庫存取dept資料表的Dao
5 | * @author Yan
6 | *
7 | */
8 | public class SqlServerDeptDao implements IDeptDao {
9 |
10 | @Override
11 | public void insert(Department dept) {
12 | System.out.println("在sql server資料庫插入一筆dept");
13 | }
14 |
15 | @Override
16 | public Department getDept(int id) {
17 | Department dept = new Department(id,"");
18 | System.out.println("sql server資料庫取出Id為 " + id + " 的dept");
19 | return dept;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/SqlServerUserDao.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 | /**
3 | * 存取sql server資料庫user資料的dao
4 | * @author Yan
5 | *
6 | */
7 | public class SqlServerUserDao implements IUserDao {
8 |
9 | @Override
10 | public void insert(User user) {
11 | System.out.println("在sql server資料庫插入一筆user");
12 | }
13 |
14 | @Override
15 | public User getUser(int id) {
16 | User user = new User(id,"");
17 | System.out.println("sql server資料庫取出Id為 " + id + " 的user");
18 | return user;
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/c15/abstractFactory/User.java:
--------------------------------------------------------------------------------
1 | package c15.abstractFactory;
2 |
3 | /**
4 | * table 定義的user類別
5 | * @author Yan
6 | *
7 | */
8 | public class User {
9 | private int id;
10 | private String name;
11 |
12 | public User(int id, String name){
13 | this.id = id;
14 | this.name = name;
15 | }
16 |
17 | public int getId() {
18 | return id;
19 | }
20 | public void setId(int id) {
21 | this.id = id;
22 | }
23 | public String getName() {
24 | return name;
25 | }
26 | public void setName(String name) {
27 | this.name = name;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/c16/state/AfternoonState.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 | /**
3 | * 中午吃飯休息狀態
4 | * @author Yan
5 | *
6 | */
7 | public class AfternoonState implements State {
8 |
9 | @Override
10 | public void writeProgram(Work work) {
11 | if(work.getHour() < 18){
12 | System.out.println("下午" + work.getHour() + "點,等下班");
13 | } else {
14 | work.setState(new EveningState());
15 | work.writeProgram();
16 | }
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c16/state/EveningState.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 | /**
3 | * 傍晚狀態
4 | * @author Yan
5 | *
6 | */
7 | public class EveningState implements State {
8 |
9 | @Override
10 | public void writeProgram(Work work) {
11 | if(work.isFinish()){
12 | work.setState(new RestState());
13 | work.writeProgram();
14 | } else if(work.getHour() < 21){
15 | System.out.println(work.getHour() + "點,加班中,哭哭");
16 | } else {
17 | System.out.println(work.getHour() + "點,警位伯伯要關門下班了");
18 | work.setState(new RestState());
19 | work.writeProgram();
20 | }
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/c16/state/ForenoonState.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 | /**
3 | * 早上上班狀態
4 | * @author Yan
5 | *
6 | */
7 | public class ForenoonState implements State {
8 |
9 | @Override
10 | public void writeProgram(Work work) {
11 | if(work.getHour() < 12){
12 | System.out.println("早上" + work.getHour() + "點,工作很有精神");
13 | } else {
14 | work.setState(new NoonState());
15 | work.writeProgram();
16 | }
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c16/state/NoonState.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 | /**
3 | * 中午吃飯休息狀態
4 | * @author Yan
5 | *
6 | */
7 | public class NoonState implements State {
8 |
9 | @Override
10 | public void writeProgram(Work work) {
11 | if(work.getHour() < 13){
12 | System.out.println("中午" + work.getHour() + "點,吃飯吃飯");
13 | } else {
14 | work.setState(new AfternoonState());
15 | work.writeProgram();
16 | }
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c16/state/RestState.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 | /**
3 | * 中午吃飯休息狀態
4 | * @author Yan
5 | *
6 | */
7 | public class RestState implements State {
8 |
9 | @Override
10 | public void writeProgram(Work work) {
11 | System.out.println(work.getHour()+"點 !!!下班回家休息了");
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/c16/state/State.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 |
3 | public interface State {
4 | void writeProgram(Work work);
5 | }
6 |
--------------------------------------------------------------------------------
/src/c16/state/Work.java:
--------------------------------------------------------------------------------
1 | package c16.state;
2 |
3 | /**
4 | * 工作
5 | * @author Yan
6 | *
7 | */
8 | public class Work {
9 | private int hour; //現在時間
10 | private boolean finish = false; //是否完成
11 | private State current; //目前狀態
12 |
13 | public Work(){
14 | current = new ForenoonState();
15 | }
16 |
17 | public int getHour() {
18 | return hour;
19 | }
20 |
21 | public void setHour(int hour) {
22 | this.hour = hour;
23 | }
24 |
25 | public boolean isFinish() {
26 | return finish;
27 | }
28 |
29 | public void setFinish(boolean finish) {
30 | this.finish = finish;
31 | }
32 |
33 | public State getState() {
34 | return current;
35 | }
36 |
37 | public void setState(State current) {
38 | this.current = current;
39 | }
40 |
41 | public void writeProgram(){
42 | current.writeProgram(this);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/c17/adapter/CenterPlayer.java:
--------------------------------------------------------------------------------
1 | package c17.adapter;
2 |
3 | public class CenterPlayer extends Player{
4 |
5 | public CenterPlayer(String name) {
6 | super(name);
7 | }
8 |
9 | @Override
10 | public void attack() {
11 | System.out.println(name + " gogogo shot");
12 | }
13 |
14 | @Override
15 | public void defense() {
16 | System.out.println(name + " try stop him");
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c17/adapter/ForeignCenterPlayer.java:
--------------------------------------------------------------------------------
1 | package c17.adapter;
2 |
3 | public class ForeignCenterPlayer {
4 | private String name;
5 |
6 | public ForeignCenterPlayer(String name){
7 | this.name = name;
8 | }
9 |
10 | public String getName(){
11 | return name;
12 | }
13 |
14 | /**
15 | * 字尾C表示只能聽懂中文
16 | */
17 | public void attackC(){
18 | System.out.println(name + " 上去投藍");
19 | }
20 |
21 | /**
22 | * 字尾C表示只能聽懂中文
23 | */
24 | public void defenseC(){
25 | System.out.println(name + " 把他擋下");
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/c17/adapter/Player.java:
--------------------------------------------------------------------------------
1 | package c17.adapter;
2 |
3 | public abstract class Player {
4 | protected String name;
5 | public Player(){
6 |
7 | }
8 |
9 | public Player(String name){
10 | this.name = name;
11 | }
12 |
13 | public abstract void attack();
14 | public abstract void defense();
15 | }
16 |
--------------------------------------------------------------------------------
/src/c17/adapter/Translator.java:
--------------------------------------------------------------------------------
1 | package c17.adapter;
2 |
3 | public class Translator extends Player{
4 | private ForeignCenterPlayer wjzf;
5 |
6 | public Translator(String name) {
7 | wjzf = new ForeignCenterPlayer(name);
8 | }
9 |
10 | @Override
11 | public void attack() {
12 | System.out.print(wjzf.getName() + " gogogo shot");
13 | System.out.print("->" );
14 | wjzf.attackC();
15 | }
16 |
17 | @Override
18 | public void defense() {
19 | System.out.print(wjzf.getName() + " try stop him");
20 | System.out.print("->" );
21 |
22 | wjzf.defenseC();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/c18/memento/GameRole.java:
--------------------------------------------------------------------------------
1 | package c18.memento;
2 |
3 | public class GameRole {
4 | private int hp = 100;
5 | private int atk = 100;
6 | private int def = 100;
7 | private String name = "第六天魔王";
8 |
9 | public RoleStateMemo save(){
10 | return new RoleStateMemo(hp,atk,def);
11 | }
12 |
13 |
14 | /**
15 | *
16 | */
17 | public void fight(){
18 | hp = 30;
19 | System.out.println(name + "剩下30%血量,出大招把隊伍打的半死");
20 | }
21 |
22 | public void stateDisplay(){
23 | System.out.println(name+"的狀態:");
24 | System.out.print("hp=" + hp);
25 | System.out.print(", atk=" + atk);
26 | System.out.println(", def=" + def);
27 | System.out.println();
28 | }
29 |
30 |
31 |
32 | public void load(RoleStateMemo memo){
33 | this.hp = memo.getHp();
34 | this.atk = memo.getAtk();
35 | this.def = memo.getDef();
36 | }
37 | public int getHp() {
38 | return hp;
39 | }
40 | public void setHp(int hp) {
41 | this.hp = hp;
42 | }
43 | public int getAtk() {
44 | return atk;
45 | }
46 | public void setAtk(int atk) {
47 | this.atk = atk;
48 | }
49 | public int getDef() {
50 | return def;
51 | }
52 | public void setDef(int def) {
53 | this.def = def;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/c18/memento/RoleStateCareTaker.java:
--------------------------------------------------------------------------------
1 | package c18.memento;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class RoleStateCareTaker {
7 | public List saves = new ArrayList<>();
8 |
9 | public RoleStateMemo getSave(){
10 | return saves.get(0);
11 | }
12 |
13 | public void setSave(RoleStateMemo memo){
14 | saves.add(0, memo);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/c18/memento/RoleStateMemo.java:
--------------------------------------------------------------------------------
1 | package c18.memento;
2 |
3 | public class RoleStateMemo {
4 | private int hp;
5 | private int atk;
6 | private int def;
7 |
8 | public RoleStateMemo(int hp, int atk, int def) {
9 | this.hp = hp;
10 | this.atk = atk;
11 | this.def = def;
12 | }
13 | public int getHp() {
14 | return hp;
15 | }
16 | public void setHp(int hp) {
17 | this.hp = hp;
18 | }
19 | public int getAtk() {
20 | return atk;
21 | }
22 | public void setAtk(int atk) {
23 | this.atk = atk;
24 | }
25 | public int getDef() {
26 | return def;
27 | }
28 | public void setDef(int def) {
29 | this.def = def;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/c19/composite/Company.java:
--------------------------------------------------------------------------------
1 | package c19.composite;
2 | /**
3 | * 公司抽象類別
4 | * @author Yan
5 | *
6 | */
7 | public abstract class Company {
8 | protected String name;
9 | public Company(String name){
10 | this.name = name;
11 | }
12 | /**
13 | * 增加轄下部門或分公司
14 | * @param c
15 | */
16 | public abstract void add(Company c);
17 | /**
18 | * 移除轄下部門或分公司
19 | * @param c
20 | */
21 | public abstract void remove(Company c);
22 | /**
23 | * 印出組織結構圖
24 | * @param depth
25 | */
26 | public abstract void display(int depth);
27 |
28 | /**
29 | * 印出組織職責
30 | */
31 | public abstract void lineOfDuty();
32 |
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/c19/composite/ConcreteCompany.java:
--------------------------------------------------------------------------------
1 | package c19.composite;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class ConcreteCompany extends Company {
7 | private List children = new ArrayList<>();
8 |
9 |
10 | public ConcreteCompany(String name) {
11 | super(name);
12 | }
13 |
14 | @Override
15 | public void add(Company c) {
16 | children.add(c);
17 | }
18 |
19 | @Override
20 | public void remove(Company c) {
21 | children.remove(c);
22 | }
23 |
24 | @Override
25 | public void display(int depth) {
26 | for(int i = 0 ; i < depth ; i++){
27 | System.out.print('-');
28 | }
29 | System.out.println(name);
30 | for(Company c : children){
31 | c.display(depth+2);
32 | }
33 | }
34 |
35 | @Override
36 | public void lineOfDuty() {
37 | for(Company c : children){
38 | c.lineOfDuty();
39 | }
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/c19/composite/FinaneDept.java:
--------------------------------------------------------------------------------
1 | package c19.composite;
2 |
3 | public class FinaneDept extends Company {
4 | public FinaneDept(String name) {
5 | super(name);
6 | }
7 |
8 | @Override
9 | public void add(Company c) {
10 |
11 | }
12 |
13 | @Override
14 | public void remove(Company c) {
15 |
16 | }
17 |
18 | @Override
19 | public void display(int depth) {
20 | for(int i = 0 ; i < depth ; i++){
21 | System.out.print('-');
22 | }
23 | System.out.println(name);
24 | }
25 |
26 | @Override
27 | public void lineOfDuty() {
28 | System.out.println(name + " 製造公司很賺錢的假像");
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/c19/composite/HRDept.java:
--------------------------------------------------------------------------------
1 | package c19.composite;
2 |
3 | public class HRDept extends Company {
4 | public HRDept(String name) {
5 | super(name);
6 | }
7 |
8 | @Override
9 | public void add(Company c) {
10 |
11 | }
12 |
13 | @Override
14 | public void remove(Company c) {
15 |
16 | }
17 |
18 | @Override
19 | public void display(int depth) {
20 | for(int i = 0 ; i < depth ; i++){
21 | System.out.print('-');
22 | }
23 | System.out.println(name);
24 | }
25 |
26 | @Override
27 | public void lineOfDuty() {
28 | System.out.println(name + " 招騙新鮮的肝");
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/c20/iterator/Aggregate.java:
--------------------------------------------------------------------------------
1 | package c20.iterator;
2 |
3 | /**
4 | * 集合元素抽象介面
5 | * @author Yan
6 | * @param
7 | */
8 | public interface Aggregate {
9 | Iterator createIterator();
10 | void add(T t);
11 | int size();
12 | T get(int index);
13 | }
14 |
--------------------------------------------------------------------------------
/src/c20/iterator/ConcreteAggregate.java:
--------------------------------------------------------------------------------
1 | package c20.iterator;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class ConcreteAggregate implements Aggregate {
7 | private List items = new ArrayList<>();
8 |
9 | @Override
10 | public Iterator createIterator() {
11 | return new ConcreteIterator<>(this);
12 | }
13 | @Override
14 | public int size(){
15 | return items.size();
16 | }
17 | @Override
18 | public T get(int index){
19 | return items.get(index);
20 | }
21 | @Override
22 | public void add(T t){
23 | items.add(t);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/c20/iterator/ConcreteIterator.java:
--------------------------------------------------------------------------------
1 | package c20.iterator;
2 |
3 | public class ConcreteIterator implements Iterator {
4 | private Aggregate aggregate;
5 | private int current = 0;
6 |
7 | /**
8 | * 初始化時傳入aggregate物件
9 | * @param aggregate
10 | */
11 | public ConcreteIterator(Aggregate aggregate){
12 | this.aggregate = aggregate;
13 | }
14 |
15 | @Override
16 | public T first() {
17 | return aggregate.get(0);
18 | }
19 |
20 | @Override
21 | public T next() {
22 | current++;
23 | return current < aggregate.size() ? aggregate.get(current) : null;
24 | }
25 |
26 | @Override
27 | public boolean isDone() {
28 | return current < aggregate.size();
29 | }
30 |
31 | @Override
32 | public T currentItem() {
33 | return current < aggregate.size() ? aggregate.get(current) : null;
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/c20/iterator/Iterator.java:
--------------------------------------------------------------------------------
1 | package c20.iterator;
2 |
3 | /**
4 | * 迭代器介面
5 | * @author Yan
6 | * @param
7 | */
8 | public interface Iterator {
9 | /**
10 | * 取出第一個元素
11 | * @return
12 | */
13 | T first();
14 | /**
15 | * 取出下一個元素
16 | * @return
17 | */
18 | T next();
19 | /**
20 | * 判斷是否結束
21 | * @return
22 | */
23 | boolean isDone();
24 |
25 | /**
26 | * 取當前元素
27 | * @return
28 | */
29 | T currentItem();
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/c21/singleton/Singleton.java:
--------------------------------------------------------------------------------
1 | package c21.singleton;
2 |
3 | public class Singleton {
4 | private static Singleton instance;
5 |
6 | private Singleton(){
7 |
8 | }
9 |
10 | public static Singleton getInstance(){
11 | if(instance == null){
12 | instance = new Singleton();
13 | }
14 |
15 | return instance;
16 |
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetBrand.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 |
3 | public abstract class HandsetBrand {
4 | protected HandsetSoft soft;
5 |
6 | public void setHandsetSoft(HandsetSoft soft){
7 | this.soft = soft;
8 | }
9 |
10 | public abstract void run();
11 | }
12 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetBrandM.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 |
3 | public class HandsetBrandM extends HandsetBrand {
4 | private String brand = "M牌手機";
5 | @Override
6 | public void run() {
7 | System.out.print(brand+" ");
8 | soft.run();
9 | }
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetBrandN.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 |
3 | public class HandsetBrandN extends HandsetBrand {
4 | private String brand = "N牌手機";
5 | @Override
6 | public void run() {
7 | System.out.print(brand+" ");
8 | soft.run();
9 | }
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetContactList.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 |
3 | /**
4 | * 手機通訊錄
5 | * @author Yan
6 | *
7 | */
8 | public class HandsetContactList implements HandsetSoft {
9 |
10 | @Override
11 | public void run() {
12 | System.out.println("執行手機通訊錄");
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetGame.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 |
3 | /**
4 | * 手機遊戲
5 | * @author Yan
6 | *
7 | */
8 | public class HandsetGame implements HandsetSoft {
9 |
10 | @Override
11 | public void run() {
12 | System.out.println("執行手機遊戲");
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/c22/bridge/HandsetSoft.java:
--------------------------------------------------------------------------------
1 | package c22.bridge;
2 | /**
3 | * 手機軟體介面
4 | * @author Yan
5 | *
6 | */
7 | public interface HandsetSoft {
8 | /**
9 | * 執行軟體
10 | */
11 | void run();
12 | }
13 |
--------------------------------------------------------------------------------
/src/c23/command/BakeChickenWingCommand.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 | /**
3 | * 烤雞翅命令
4 | * @author Yan
5 | *
6 | */
7 | public class BakeChickenWingCommand extends Command {
8 | private String name = "chickhenWing";
9 | public BakeChickenWingCommand(Barbecuer receiver) {
10 | super(receiver);
11 | }
12 |
13 | @Override
14 | public void excuteCommand() {
15 | receiver.bakeChickenWing();
16 | }
17 |
18 | public String getName(){
19 | return name;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/c23/command/BakeMutonCommand.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 | /**
3 | * 烤羊肉串命令
4 | * @author Yan
5 | *
6 | */
7 | public class BakeMutonCommand extends Command {
8 | private String name = "mutton";
9 | public BakeMutonCommand(Barbecuer receiver) {
10 | super(receiver);
11 | }
12 |
13 | @Override
14 | public void excuteCommand() {
15 | receiver.bakeMutton();
16 | }
17 | public String getName(){
18 | return name;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/c23/command/Barbecuer.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 | /**
3 | * 烤肉串廚師
4 | * @author Yan
5 | *
6 | */
7 | public class Barbecuer {
8 | /**
9 | * 烤羊肉
10 | */
11 | public void bakeMutton(){
12 | System.out.println("烤羊肉串");
13 | }
14 |
15 | /**
16 | * 烤雞翅
17 | */
18 | public void bakeChickenWing(){
19 | System.out.println("烤雞翅");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/c23/command/Command.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 | /**
3 | * 抽象命令
4 | * @author Yan
5 | *
6 | */
7 | public abstract class Command {
8 | // 接受指令的人
9 | protected Barbecuer receiver;
10 | public Command(Barbecuer receiver){
11 | this.receiver = receiver;
12 | }
13 |
14 | // 執行指令
15 | abstract public void excuteCommand();
16 |
17 | abstract public String getName();
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c23/command/Waiter.java:
--------------------------------------------------------------------------------
1 | package c23.command;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Date;
5 | import java.util.List;
6 | /**
7 | * 接訂單的服務生
8 | * @author Yan
9 | *
10 | */
11 | public class Waiter {
12 | private int chickhenWingCount = 2;
13 | private int muttonCount = 3;
14 | private List orders = new ArrayList<>();
15 |
16 | /**
17 | * 接訂單
18 | * @param command
19 | */
20 | @SuppressWarnings("deprecation")
21 | public void setOrder(Command command){
22 | if(command.getName().equals("chickhenWing")){
23 | if(chickhenWingCount <= 0){
24 | System.out.println("雞翅賣完了");
25 | } else{
26 | System.out.println("增加"+ command.getName() +"訂單 時間:" + new Date().toLocaleString());
27 | chickhenWingCount--;
28 | orders.add(command);
29 | }
30 | } else {
31 | if(muttonCount <= 0){
32 | System.out.println("羊肉串賣完了");
33 | } else{
34 | System.out.println("增加"+ command.getName() +"訂單 時間:" + new Date().toLocaleString());
35 | muttonCount--;
36 | orders.add(command);
37 |
38 | }
39 | }
40 | }
41 |
42 | @SuppressWarnings("deprecation")
43 | /**
44 | * 取消訂單
45 | * @param command
46 | */
47 | public void cancelOrder(Command command){
48 | if(command.getName().equals("chickhenWing")){
49 | chickhenWingCount++;
50 | } else {
51 | muttonCount++;
52 | }
53 | orders.remove(command);
54 | System.out.println("取消"+ command.getName() +"訂單 時間:" + new Date().toLocaleString());
55 | }
56 |
57 | /**
58 | * 將訂單將給廚師
59 | */
60 | public void notifyBaker(){
61 | for(Command c:orders){
62 | c.excuteCommand();
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/c24/ChainOfResponsibility/ApplyRequest.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 | /**
3 | * 提出申請
4 | * @author Yan
5 | *
6 | */
7 | public class ApplyRequest {
8 | /**
9 | * 申請類別
10 | */
11 | private String requestType;
12 | /**
13 | * 申請內容
14 | */
15 | private String requestContent;
16 | /**
17 | * 申請數
18 | */
19 | private int requestCount;
20 |
21 |
22 |
23 | public String getRequestType() {
24 | return requestType;
25 | }
26 | public void setRequestType(String requestType) {
27 | this.requestType = requestType;
28 | }
29 | public String getRequestContent() {
30 | return requestContent;
31 | }
32 | public void setRequestContent(String requestContent) {
33 | this.requestContent = requestContent;
34 | }
35 | public int getRequestCount() {
36 | return requestCount;
37 | }
38 | public void setRequestCount(int requestCount) {
39 | this.requestCount = requestCount;
40 | }
41 |
42 |
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/c24/ChainOfResponsibility/CommonManager.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 |
3 | /**
4 | * 經理
5 | * @author Yan
6 | *
7 | */
8 | public class CommonManager extends Manager {
9 |
10 | public CommonManager(String name) {
11 | super(name);
12 | }
13 |
14 | @Override
15 | public void apply(ApplyRequest request) {
16 | //2天以下的假就批准,其他丟給上級
17 | if(request.getRequestType().equals("請假") && request.getRequestCount() <= 2){
18 | System.out.print(request.getRequestType() + ":" + request.getRequestContent());
19 | System.out.println(" " + request.getRequestCount() + "天 被" + name + "批准");
20 | } else {
21 | if(superior != null){
22 | superior.apply(request);
23 | }
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/c24/ChainOfResponsibility/GeneralManager.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 |
3 | /**
4 | * 總經理
5 | * @author Yan
6 | *
7 | */
8 | public class GeneralManager extends Manager {
9 |
10 | public GeneralManager(String name) {
11 | super(name);
12 | }
13 |
14 | @Override
15 | public void apply(ApplyRequest request) {
16 | if(request.getRequestType().equals("請假")){
17 | System.out.print(request.getRequestType() + ":" + request.getRequestContent());
18 | System.out.println(" " + request.getRequestCount() + "天 被" + name + "批准");
19 | } else {
20 | if(request.getRequestCount() <= 1000){
21 | System.out.print(request.getRequestType() + ":" + request.getRequestContent());
22 | System.out.println(" " + request.getRequestCount() + "元 被" + name + "批准");
23 | } else {
24 | System.out.print(request.getRequestType() + ":" + request.getRequestContent());
25 | System.out.println(" " + request.getRequestCount() + "元 被" + name + "駁回");
26 | }
27 | }
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/c24/ChainOfResponsibility/Majordomo.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 |
3 | /**
4 | * 總監
5 | * @author Yan
6 | *
7 | */
8 | public class Majordomo extends Manager {
9 |
10 | public Majordomo(String name) {
11 | super(name);
12 | }
13 |
14 | @Override
15 | public void apply(ApplyRequest request) {
16 | //5天以下的假就批准,其他丟給上級
17 | if(request.getRequestType().equals("請假") && request.getRequestCount() <= 5){
18 | System.out.print(request.getRequestType() + ":" + request.getRequestContent());
19 | System.out.println(" " + request.getRequestCount() + "天 被" + name + "批准");
20 | } else {
21 | if(superior != null){
22 | superior.apply(request);
23 | }
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/c24/ChainOfResponsibility/Manager.java:
--------------------------------------------------------------------------------
1 | package c24.ChainOfResponsibility;
2 |
3 | /**
4 | * 管理者
5 | * @author Yan
6 | *
7 | */
8 | public abstract class Manager {
9 | protected String name;
10 |
11 | //上一級管理者
12 | protected Manager superior;
13 |
14 | public Manager(String name){
15 | this.name = name;
16 | }
17 |
18 | //設定上一級的管理者
19 | public void setSuperior(Manager superior){
20 | this.superior = superior;
21 | }
22 | /**
23 | * 提出申請
24 | * @param request
25 | */
26 | abstract public void apply(ApplyRequest request);
27 | }
28 |
--------------------------------------------------------------------------------
/src/c25/mediator/Country.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 | /**
3 | * 國家
4 | * @author Yan
5 | *
6 | */
7 | public abstract class Country {
8 | protected UniteNations mediator;
9 | public Country(UniteNations mediator){
10 | this.mediator = mediator;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/c25/mediator/Iraq.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 |
3 | public class Iraq extends Country {
4 |
5 | public Iraq(UniteNations mediator) {
6 | super(mediator);
7 | }
8 | /**
9 | * 放話
10 | * @param message
11 | */
12 | public void declare(String message){
13 | mediator.declare(message, this);
14 | }
15 | /**
16 | * 接收消息
17 | */
18 | public void getMessage(String message){
19 | System.out.println("伊拉克獲得對方訊息: " + message);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/c25/mediator/UNSC.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 | /**
3 | * 聯合國安理會
4 | * @author Yan
5 | *
6 | */
7 | public class UNSC implements UniteNations {
8 | private USA countryA;
9 | private Iraq countryB;
10 | @Override
11 | public void declare(String message, Country country) {
12 | if(country == countryA){
13 | countryB.getMessage(message);
14 | } else {
15 | countryA.getMessage(message);
16 | }
17 |
18 | }
19 |
20 |
21 | public USA getCountryA() {
22 | return countryA;
23 | }
24 | public void setCountryA(USA countryA) {
25 | this.countryA = countryA;
26 | }
27 | public Iraq getCountryB() {
28 | return countryB;
29 | }
30 | public void setCountryB(Iraq countryB) {
31 | this.countryB = countryB;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/c25/mediator/USA.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 |
3 | public class USA extends Country {
4 |
5 | public USA(UniteNations mediator) {
6 | super(mediator);
7 | }
8 | /**
9 | * 放話
10 | * @param message
11 | */
12 | public void declare(String message){
13 | mediator.declare(message, this);
14 | }
15 | /**
16 | * 接收消息
17 | */
18 | public void getMessage(String message){
19 | System.out.println("美國獲得對方訊息: " + message);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/c25/mediator/UniteNations.java:
--------------------------------------------------------------------------------
1 | package c25.mediator;
2 | /**
3 | * 聯合國
4 | * @author Yan
5 | *
6 | */
7 | public interface UniteNations {
8 | /**
9 | * 聯合國幫忙傳話
10 | * @param message
11 | * @param country
12 | */
13 | void declare(String message,Country country);
14 | }
15 |
--------------------------------------------------------------------------------
/src/c26/flywight/ConcreteWebsite.java:
--------------------------------------------------------------------------------
1 | package c26.flywight;
2 | /**
3 | * 實體網站
4 | * @author Yan
5 | *
6 | */
7 | public class ConcreteWebsite implements Website {
8 | private String name ;
9 | public ConcreteWebsite(String name) {
10 | this.name = name;
11 | }
12 | @Override
13 | public void use(User user) {
14 | System.out.println("網站分類:" + name + " 用戶:"+user.getName());
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/c26/flywight/User.java:
--------------------------------------------------------------------------------
1 | package c26.flywight;
2 | /**
3 | * 不同的網站擁有者
4 | * @author Yan
5 | *
6 | */
7 | public class User {
8 | private String name;
9 | public User(String name){
10 | this.name = name;
11 | }
12 |
13 | public String getName(){
14 | return name;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/c26/flywight/WebSiteFactory.java:
--------------------------------------------------------------------------------
1 | package c26.flywight;
2 |
3 | import java.util.HashMap;
4 |
5 | /**
6 | * 網站工廠
7 | * @author Yan
8 | *
9 | */
10 | public class WebSiteFactory {
11 | private HashMap flyweights = new HashMap<>();
12 | /**
13 | * 取得網站分類
14 | * @param key
15 | * @return
16 | */
17 | public Website getWebsiteCategory(String key){
18 | if(!flyweights.containsKey(key)){
19 | flyweights.put(key, new ConcreteWebsite(key));
20 | }
21 |
22 | return flyweights.get(key);
23 | }
24 |
25 | /**
26 | * 或得目前網站分類數
27 | * @return
28 | */
29 | public int getWebsiteCount(){
30 | return flyweights.size();
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/c26/flywight/Website.java:
--------------------------------------------------------------------------------
1 | package c26.flywight;
2 |
3 | /**
4 | * 網站
5 | * @author Yan
6 | *
7 | */
8 | public interface Website {
9 | void use(User user);
10 | }
11 |
--------------------------------------------------------------------------------
/src/c27/interpreter/Expression.java:
--------------------------------------------------------------------------------
1 | package c27.interpreter;
2 | /**
3 | * 運算式類別
4 | * @author Yan
5 | *
6 | */
7 | public abstract class Expression {
8 | public void interpret(PlayContext context){
9 | if(context.getText().length() > 0){
10 | // 從樂譜取出第一條命令 ex."O 3 E 0.5"取出 playkey = "O",playValue = "3"
11 | String text = context.getText();
12 | String playKey = text.substring(0, 1);
13 | text = text.substring(2);
14 | String playValue = text.substring(0, text.indexOf(" "));
15 | context.setText(text.substring(text.indexOf(" ") + 1));
16 | excute(playKey,playValue);
17 | }
18 | }
19 |
20 | public abstract void excute(String playKey,String playValue);
21 | }
22 |
--------------------------------------------------------------------------------
/src/c27/interpreter/Note.java:
--------------------------------------------------------------------------------
1 | package c27.interpreter;
2 | /**
3 | * 音符
4 | * @author Yan
5 | *
6 | */
7 | public class Note extends Expression {
8 |
9 | @Override
10 | public void excute(String playKey, String playValue) {
11 | String node = "";
12 | switch(playKey){
13 | // key = C,演奏1(do)
14 | case "C": node = "1" ; break;
15 | // key = D,演奏2(ri)
16 | case "D": node = "2" ; break;
17 |
18 | case "E": node = "3" ; break;
19 |
20 | case "F": node = "4" ; break;
21 |
22 | case "G": node = "5" ; break;
23 |
24 | case "A": node = "6" ; break;
25 |
26 | case "B": node = "7" ; break;
27 |
28 | }
29 | System.out.print(node+" ");
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/c27/interpreter/PlayContext.java:
--------------------------------------------------------------------------------
1 | package c27.interpreter;
2 | /**
3 | * 演奏內容
4 | * @author Yan
5 | *
6 | */
7 | public class PlayContext {
8 | private String text;
9 | /**
10 | * 演奏樂譜
11 | * @return
12 | */
13 | public String getText() {
14 | return text;
15 | }
16 |
17 | /**
18 | * 設定演奏的樂譜
19 | * @param text
20 | */
21 | public void setText(String text) {
22 | this.text = text;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/c27/interpreter/Scale.java:
--------------------------------------------------------------------------------
1 | package c27.interpreter;
2 | /**
3 | * 音階
4 | * @author Yan
5 | *
6 | */
7 | public class Scale extends Expression {
8 |
9 | @Override
10 | public void excute(String playKey, String playValue) {
11 | String node = "";
12 | switch(playValue){
13 | case "1": node = "低音" ; break;
14 | case "2": node = "中音" ; break;
15 | case "3": node = "高音" ; break;
16 | }
17 | System.out.print(node+" ");
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/c28/visitor/Action.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 | /**
3 | * 狀態
4 | * @author Yan
5 | *
6 | */
7 | public interface Action {
8 | void getManConclusion(Man concreteElementA);
9 | void getWomanConclusion(Woman concreteElementB);
10 | }
11 |
--------------------------------------------------------------------------------
/src/c28/visitor/Failing.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 | /**
3 | * 失敗狀態
4 | * @author Yan
5 | *
6 | */
7 | public class Failing implements Action{
8 |
9 | @Override
10 | public void getManConclusion(Man concreteElementA) {
11 | System.out.println(concreteElementA.getClass().getSimpleName() + " "+ this.getClass().getSimpleName()+"時,會被女人唾棄");
12 | }
13 |
14 | @Override
15 | public void getWomanConclusion(Woman concreteElementB) {
16 | System.out.println(concreteElementB.getClass().getSimpleName() + " "+ this.getClass().getSimpleName()+"時,上網QQ找人回收");
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c28/visitor/Man.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 |
3 | public class Man implements Person {
4 |
5 | @Override
6 | public void accept(Action visitor) {
7 | visitor.getManConclusion(this);
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/src/c28/visitor/ObjectStructure.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | // 物件結構
7 | public class ObjectStructure {
8 | private List elements = new ArrayList<>();
9 | /**
10 | * 新增
11 | * @param element
12 | */
13 | public void attach(Person element){
14 | elements.add(element);
15 | }
16 | /**
17 | * 移除
18 | * @param element
19 | */
20 | public void detach(Person element){
21 | elements.remove(element);
22 | }
23 | /**
24 | * 查看顯示
25 | */
26 | public void display(Action visitor){
27 | for(Person e : elements){
28 | e.accept(visitor);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/c28/visitor/Person.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 | /**
3 | * 人
4 | * @author Yan
5 | *
6 | */
7 | public interface Person {
8 | /**
9 | * 接受
10 | * @param visitor 用來取得"狀態"
11 | */
12 | void accept(Action visitor);
13 | }
14 |
--------------------------------------------------------------------------------
/src/c28/visitor/Success.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 | /**
3 | * 成功狀態
4 | * @author Yan
5 | *
6 | */
7 | public class Success implements Action{
8 |
9 | @Override
10 | public void getManConclusion(Man concreteElementA) {
11 | System.out.println(concreteElementA.getClass().getSimpleName() + " "+ this.getClass().getSimpleName()+"時,背後多半有一個偉大的女人");
12 | }
13 |
14 | @Override
15 | public void getWomanConclusion(Woman concreteElementB) {
16 | System.out.println(concreteElementB.getClass().getSimpleName() + " "+ this.getClass().getSimpleName()+"時,背後多半有一個QQ的男人");
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/c28/visitor/Woman.java:
--------------------------------------------------------------------------------
1 | package c28.visitor;
2 |
3 | public class Woman implements Person {
4 |
5 | @Override
6 | public void accept(Action visitor) {
7 | visitor.getWomanConclusion(this);
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/uml/AbstractFactory.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
43 |
44 |
46 |
47 |
48 |
49 |
50 |
52 |
53 |
55 |
56 |
57 |
58 |
59 |
61 |
62 |
64 |
65 |
66 |
67 |
68 |
70 |
71 |
73 |
74 |
75 |
76 |
77 |
79 |
80 |
82 |
83 |
84 |
85 |
86 |
88 |
89 |
91 |
92 |
93 |
94 |
95 |
97 |
98 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
171 |
172 |
173 |
174 |
175 |
--------------------------------------------------------------------------------
/uml/Adapter.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/uml/Bridge.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/uml/Builder.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/uml/ChainOfResponsibility.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
19 |
20 |
21 |
22 |
23 |
26 |
27 |
29 |
30 |
31 |
32 |
33 |
35 |
36 |
38 |
39 |
40 |
41 |
42 |
45 |
46 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/uml/Command.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/uml/Composite.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/uml/Decorator.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/uml/Facade.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
96 |
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/uml/Factory.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/uml/Flyweight.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/uml/Interpreter.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/uml/Iterator.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/uml/Mediator.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/uml/Memento.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/uml/Observer.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/uml/SimpleFactory.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/uml/Singleton.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/uml/State.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
60 |
61 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/uml/Strategy.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
25 |
26 |
28 |
29 |
30 |
31 |
32 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
43 |
44 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/uml/Template.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/uml/Visitor.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/uml/prototype.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/uml/proxy.ucls:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
24 |
25 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------