├── .idea
├── compiler.xml
├── encodings.xml
├── libraries
│ ├── Maven__asm_asm_all_3_3_1.xml
│ ├── Maven__cglib_cglib_3_2_12.xml
│ ├── Maven__org_aspectj_aspectjweaver_1_9_4.xml
│ ├── Maven__org_ow2_asm_asm_7_1.xml
│ ├── Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml
│ ├── Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml
│ ├── Maven__org_springframework_spring_context_5_1_6_RELEASE.xml
│ ├── Maven__org_springframework_spring_core_5_1_6_RELEASE.xml
│ ├── Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml
│ └── Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml
├── misc.xml
├── modules.xml
├── vcs.xml
└── workspace.xml
├── DesignPatterns.iml
├── pom.xml
└── src
└── main
├── java
└── com
│ └── mashibing
│ └── dp
│ ├── ASM
│ ├── ClassPrinter.java
│ ├── ClassTransformerTest.java
│ ├── ClassWriteTest.java
│ ├── Main.java
│ ├── MyClassLoader.java
│ ├── T1.java
│ ├── Tank.java
│ └── TimeProxy.java
│ ├── Iterator
│ ├── v1
│ │ └── Main.java
│ ├── v2
│ │ └── Main.java
│ ├── v3
│ │ ├── ArrayList_.java
│ │ ├── Collection_.java
│ │ ├── LinkedList_.java
│ │ └── Main.java
│ ├── v4
│ │ ├── ArrayList_.java
│ │ ├── Collection_.java
│ │ ├── LinkedList_.java
│ │ └── Main.java
│ ├── v5
│ │ ├── ArrayList_.java
│ │ ├── Collection_.java
│ │ ├── Iterator_.java
│ │ ├── LinkedList_.java
│ │ └── Main.java
│ ├── v6
│ │ └── Main.java
│ └── v7
│ │ ├── ArrayList_.java
│ │ ├── Collection_.java
│ │ ├── Iterator_.java
│ │ ├── LinkedList_.java
│ │ └── Main.java
│ ├── TemplateMethod
│ └── Main.java
│ ├── Test.java
│ ├── abstractfactory
│ ├── AK47.java
│ ├── AbastractFactory.java
│ ├── Bread.java
│ ├── Broom.java
│ ├── Car.java
│ ├── Food.java
│ ├── MagicFactory.java
│ ├── MagicStick.java
│ ├── Main.java
│ ├── ModernFactory.java
│ ├── MushRoom.java
│ ├── Vehicle.java
│ └── Weapon.java
│ ├── adapter
│ └── Main.java
│ ├── bridge
│ ├── v1
│ │ ├── Book.java
│ │ ├── Flower.java
│ │ ├── GG.java
│ │ ├── Gift.java
│ │ └── MM.java
│ ├── v2
│ │ ├── Book.java
│ │ ├── Flower.java
│ │ ├── GG.java
│ │ ├── Gift.java
│ │ ├── MM.java
│ │ ├── WarmGift.java
│ │ ├── WildGift.java
│ │ └── readme
│ ├── v3
│ │ ├── Book.java
│ │ ├── Flower.java
│ │ ├── GG.java
│ │ ├── Gift.java
│ │ ├── MM.java
│ │ ├── WarmFlower.java
│ │ ├── WarmGift.java
│ │ ├── WildGift.java
│ │ └── readme
│ └── v4
│ │ ├── Book.java
│ │ ├── Flower.java
│ │ ├── GG.java
│ │ ├── Gift.java
│ │ ├── GiftImpl.java
│ │ ├── MM.java
│ │ ├── WarmGift.java
│ │ ├── WildGift.java
│ │ └── readme
│ ├── builder
│ ├── ComplexTerrainBuilder.java
│ ├── Main.java
│ ├── Person.java
│ ├── Terrain.java
│ └── TerrainBuilder.java
│ ├── cglib
│ └── Main.java
│ ├── command
│ ├── Command.java
│ ├── Content.java
│ ├── CopyCommand.java
│ ├── DeleteCommand.java
│ ├── InsertCommand.java
│ └── Main.java
│ ├── composite
│ └── Main.java
│ ├── cor
│ ├── Main.java
│ ├── Main.java.bak
│ └── servlet
│ │ ├── v1
│ │ └── Servlet_Main.java
│ │ ├── v2
│ │ ├── Servlet_Main.java
│ │ └── readme
│ │ ├── v3
│ │ ├── Servlet_Main.java
│ │ └── readme
│ │ └── v4
│ │ ├── Servlet_Main.java
│ │ └── readme
│ ├── decorator
│ ├── Main.java
│ └── readme
│ ├── factorymethod
│ ├── Broom.java
│ ├── Car.java
│ ├── CarFactory.java
│ ├── Main.java
│ ├── Moveable.java
│ ├── Plane.java
│ └── SimpleVehicleFactory.java
│ ├── flyweight
│ ├── BulletPool.java
│ └── TestString.java
│ ├── intepreter
│ └── readme
│ ├── memento
│ └── readme
│ ├── observer
│ ├── v1
│ │ └── Main1.java
│ ├── v10
│ │ └── readme
│ ├── v11
│ │ └── readme
│ ├── v2
│ │ └── Main.java
│ ├── v3
│ │ └── Main.java
│ ├── v4
│ │ └── Main.java
│ ├── v5
│ │ └── Main.java
│ ├── v6
│ │ └── Main.java
│ ├── v7
│ │ └── Main.java
│ ├── v8
│ │ └── Main.java
│ └── v9
│ │ ├── Test.java
│ │ └── TestFrame.java
│ ├── prototype
│ ├── v1
│ │ └── Test.java
│ ├── v2
│ │ └── Test.java
│ ├── v3
│ │ └── Test.java
│ └── v4
│ │ └── Test.java
│ ├── proxy
│ ├── v01
│ │ └── Tank.java
│ ├── v02
│ │ └── Tank.java
│ ├── v03
│ │ └── Tank.java
│ ├── v04
│ │ └── Tank.java
│ ├── v05
│ │ └── Tank.java
│ ├── v06
│ │ └── Tank.java
│ ├── v07
│ │ └── Tank.java
│ ├── v08
│ │ └── Tank.java
│ ├── v09
│ │ └── Tank.java
│ ├── v10
│ │ └── Tank.java
│ └── v11
│ │ ├── LogInterceptor.java
│ │ ├── RealSubject.java
│ │ ├── Subject.java
│ │ └── Test.java
│ ├── singleton
│ ├── Main.java
│ ├── Mgr01.java
│ ├── Mgr02.java
│ ├── Mgr03.java
│ ├── Mgr04.java
│ ├── Mgr05.java
│ ├── Mgr06.java
│ ├── Mgr07.java
│ └── Mgr08.java
│ ├── spring
│ ├── v1
│ │ ├── Main.java
│ │ ├── Tank.java
│ │ └── TimeProxy.java
│ └── v2
│ │ ├── Main.java
│ │ ├── Tank.java
│ │ └── TimeProxy.java
│ ├── state
│ ├── readme
│ ├── thread
│ │ ├── Action.java
│ │ ├── NewState.java
│ │ ├── RunningState.java
│ │ ├── TerminatedState.java
│ │ ├── ThreadState_.java
│ │ └── Thread_.java
│ ├── v1
│ │ └── MM.java
│ └── v2
│ │ ├── MM.java
│ │ ├── MMHappyState.java
│ │ ├── MMNervousState.java
│ │ ├── MMSadState.java
│ │ └── MMState.java
│ ├── strategy
│ ├── Cat.java
│ ├── CatHeightComparator.java
│ ├── CatWeightComparator.java
│ ├── Comparable.java
│ ├── Comparator.java
│ ├── Dog.java
│ ├── DogComparator.java
│ ├── Main.java
│ └── Sorter.java
│ └── visitor
│ └── Computer.java
└── resources
├── app.xml
└── app_auto.xml
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__asm_asm_all_3_3_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__cglib_cglib_3_2_12.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_4.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_ow2_asm_asm_7_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_context_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_core_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
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 |
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 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | ProxyGe
120 | getBean
121 | arrayco
122 | method start..
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 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 | 1556253030883
433 |
434 |
435 | 1556253030883
436 |
437 |
438 |
439 |
440 | 1556285498852
441 |
442 |
443 |
444 | 1556285498853
445 |
446 |
447 | 1557238216848
448 |
449 |
450 |
451 | 1557238216848
452 |
453 |
454 | 1557411092939
455 |
456 |
457 |
458 | 1557411092940
459 |
460 |
461 | 1557576023035
462 |
463 |
464 |
465 | 1557576023035
466 |
467 |
468 | 1558275442357
469 |
470 |
471 |
472 | 1558275442357
473 |
474 |
475 | 1558490606445
476 |
477 |
478 |
479 | 1558490606445
480 |
481 |
482 | 1558621081544
483 |
484 |
485 |
486 | 1558621081544
487 |
488 |
489 | 1558879448557
490 |
491 |
492 |
493 | 1558879448557
494 |
495 |
496 | 1590497989409
497 |
498 |
499 |
500 | 1590497989409
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/spring/v2/Main.java
562 | 12
563 |
564 |
565 |
566 |
567 | jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-sources.jar!/org/springframework/beans/factory/support/AbstractBeanFactory.java
568 | 245
569 |
570 |
571 |
572 |
573 | jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-sources.jar!/org/springframework/beans/factory/support/AbstractBeanFactory.java
574 | 319
575 |
576 |
577 |
578 |
579 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v10/Tank.java
580 | 36
581 |
582 |
583 |
584 |
585 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v10/Tank.java
586 | 59
587 |
588 |
589 |
590 |
591 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v10/Tank.java
592 | 79
593 |
594 |
595 |
596 |
597 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v11/Test.java
598 | 23
599 |
600 |
601 |
602 |
603 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v11/RealSubject.java
604 | 7
605 |
606 |
607 |
608 |
609 | file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/proxy/v11/LogInterceptor.java
610 | 36
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 | subjectProxy
621 | JAVA
622 | EXPRESSION
623 |
624 |
625 | method
626 | JAVA
627 | EXPRESSION
628 |
629 |
630 | m
631 | JAVA
632 | EXPRESSION
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 |
928 |
929 |
930 |
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 |
1035 |
1036 |
1037 |
1038 |
1039 | Spring
1040 |
1041 |
1042 |
1043 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 |
1058 |
1059 |
1060 |
1061 |
1062 | 1.8
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 |
1071 |
1072 |
1073 |
1074 | DesignPatterns
1075 |
1076 |
1077 |
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 | Maven: cglib:cglib:3.2.12
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
--------------------------------------------------------------------------------
/DesignPatterns.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | mashibing.com
8 | DesignPatterns
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 |
14 | org.springframework
15 | spring-context
16 | 5.1.6.RELEASE
17 |
18 |
19 |
20 |
21 | org.aspectj
22 | aspectjweaver
23 | 1.9.4
24 |
25 |
26 |
27 |
28 |
29 | cglib
30 | cglib
31 | 3.2.12
32 |
33 |
34 |
35 |
36 | asm
37 | asm-all
38 | 3.3.1
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | org.apache.maven.plugins
47 | maven-compiler-plugin
48 | 3.2
49 |
50 | 1.8
51 | 1.8
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/ClassPrinter.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | import org.objectweb.asm.ClassReader;
4 | import org.objectweb.asm.ClassVisitor;
5 | import org.objectweb.asm.FieldVisitor;
6 | import org.objectweb.asm.MethodVisitor;
7 |
8 | import java.io.IOException;
9 |
10 | import static org.objectweb.asm.Opcodes.ASM4;
11 |
12 | public class ClassPrinter extends ClassVisitor {
13 | public ClassPrinter() {
14 | super(ASM4);
15 | }
16 |
17 | @Override
18 | public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
19 | System.out.println(name + " extends " + superName + "{" );
20 | }
21 |
22 | @Override
23 | public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) {
24 | System.out.println(" " + name);
25 | return null;
26 | }
27 |
28 | @Override
29 | public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
30 | System.out.println(" " + name + "()");
31 | return null;
32 | }
33 |
34 | @Override
35 | public void visitEnd() {
36 |
37 | System.out.println("}");
38 | }
39 |
40 | public static void main(String[] args) throws IOException {
41 | ClassPrinter cp = new ClassPrinter();
42 | //ClassReader cr = new ClassReader("java.lang.Runnable");
43 | ClassReader cr = new ClassReader(
44 | ClassPrinter.class.getClassLoader().getResourceAsStream("com/mashibing/dp/ASM/T1.class"));
45 |
46 |
47 | cr.accept(cp, 0);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/ClassTransformerTest.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | import org.objectweb.asm.*;
4 |
5 | import java.io.File;
6 | import java.io.FileOutputStream;
7 | import java.io.OutputStream;
8 |
9 | import static org.objectweb.asm.Opcodes.*;
10 |
11 | public class ClassTransformerTest {
12 | public static void main(String[] args) throws Exception {
13 | ClassReader cr = new ClassReader(
14 | ClassPrinter.class.getClassLoader().getResourceAsStream("com/mashibing/dp/ASM/Tank.class"));
15 |
16 | ClassWriter cw = new ClassWriter(0);
17 | ClassVisitor cv = new ClassVisitor(ASM4, cw) {
18 | @Override
19 | public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
20 | MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
21 | //return mv;
22 | return new MethodVisitor(ASM4, mv) {
23 | @Override
24 | public void visitCode() {
25 | visitMethodInsn(INVOKESTATIC, "com/mashibing/dp/ASM/TimeProxy","before", "()V", false);
26 | super.visitCode();
27 | }
28 | };
29 | }
30 | };
31 |
32 | cr.accept(cv, 0);
33 | byte[] b2 = cw.toByteArray();
34 |
35 | MyClassLoader cl = new MyClassLoader();
36 | //Class c = cl.loadClass("com.mashibing.dp.ASM.Tank");
37 | cl.loadClass("com.mashibing.dp.ASM.TimeProxy");
38 | Class c2 = cl.defineClass("com.mashibing.dp.ASM.Tank", b2);
39 | c2.getConstructor().newInstance();
40 |
41 |
42 | String path = (String)System.getProperties().get("user.dir");
43 | File f = new File(path + "/com/mashibing/dp/ASM/");
44 | f.mkdirs();
45 |
46 | FileOutputStream fos = new FileOutputStream(new File(path + "/com/mashibing/dp/ASM/Tank_0.class"));
47 | fos.write(b2);
48 | fos.flush();
49 | fos.close();
50 |
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/ClassWriteTest.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | import org.objectweb.asm.ClassWriter;
4 |
5 | import static org.objectweb.asm.Opcodes.*;
6 |
7 | public class ClassWriteTest {
8 | public static void main(String[] args) {
9 | ClassWriter cw = new ClassWriter(0);
10 | cw.visit(V1_5, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE,
11 | "pkg/Comparable", null, "java/lang/Object",
12 | null);
13 | cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "LESS", "I",
14 | null, -1).visitEnd();
15 | cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "EQUAL", "I",
16 | null, 0).visitEnd();
17 | cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "GREATER", "I",
18 | null, 1).visitEnd();
19 | cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "compareTo",
20 | "(Ljava/lang/Object;)I", null, null).visitEnd();
21 | cw.visitEnd();
22 | byte[] b = cw.toByteArray();
23 |
24 | MyClassLoader myClassLoader = new MyClassLoader();
25 | Class c = myClassLoader.defineClass("pkg.Comparable", b);
26 | System.out.println(c.getMethods()[0].getName());
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | new T1();
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/MyClassLoader.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | class MyClassLoader extends ClassLoader {
4 | public Class defineClass(String name, byte[] b) {
5 | return defineClass(name, b, 0, b.length);
6 | }
7 |
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/T1.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | /**
4 | * 光标必须位于类体内,View-Show ByteCode
5 | */
6 |
7 | public class T1 {
8 | int i = 0;
9 | public void m() {
10 | int j=1;
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/Tank.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | public class Tank {
4 | public void move(){
5 | System.out.println("Tank Moving ClaClaCla ...");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/ASM/TimeProxy.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.ASM;
2 |
3 | public class TimeProxy {
4 |
5 | public static void before() {
6 | System.out.println("before ...");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v1/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v1;
2 |
3 | /**
4 | * 构建一个容器,可以添加对象
5 | */
6 |
7 | public class Main {
8 | public static void main(String[] args) {
9 | ArrayList_ list = new ArrayList_();
10 | for(int i=0; i<15; i++) {
11 | list.add(new String("s" + i));
12 | }
13 | System.out.println(list.size());
14 | }
15 | }
16 |
17 |
18 | /**
19 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
20 | */
21 | class ArrayList_ {
22 | Object[] objects = new Object[10];
23 | //objects中下一个空的位置在哪儿,或者说,目前容器中有多少个元素
24 | private int index = 0;
25 | public void add(Object o) {
26 | if(index == objects.length) {
27 | Object[] newObjects = new Object[objects.length*2];
28 | System.arraycopy(objects, 0, newObjects, 0, objects.length);
29 | objects = newObjects;
30 | }
31 |
32 | objects[index] = o;
33 | index ++;
34 | }
35 |
36 | public int size() {
37 | return index;
38 | }
39 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v2/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v2;
2 |
3 | /**
4 | * v1:构建一个容器,可以添加对象
5 | * v2:用链表来实现一个容器
6 | */
7 |
8 | public class Main {
9 | public static void main(String[] args) {
10 | LinkedList_ list = new LinkedList_();
11 | for(int i=0; i<15; i++) {
12 | list.add(new String("s" + i));
13 | }
14 | System.out.println(list.size());
15 | }
16 | }
17 |
18 |
19 | /**
20 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
21 | */
22 | class LinkedList_ {
23 | Node head = null;
24 | Node tail = null;
25 | //目前容器中有多少个元素
26 | private int size = 0;
27 |
28 | public void add(Object o) {
29 | Node n = new Node(o);
30 | n.next = null;
31 |
32 | if(head == null) {
33 | head = n;
34 | tail = n;
35 | }
36 |
37 | tail.next = n;
38 | tail = n;
39 | size++;
40 | }
41 |
42 | private class Node {
43 | private Object o;
44 | Node next;
45 |
46 | public Node(Object o) {
47 | this.o = o;
48 | }
49 | }
50 |
51 | public int size() {
52 | return size;
53 | }
54 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v3/ArrayList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v3;
2 |
3 |
4 | /**
5 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
6 | */
7 | class ArrayList_ implements Collection_ {
8 | Object[] objects = new Object[10];
9 | //objects中下一个空的位置在哪儿,或者说,目前容器中有多少个元素
10 | private int index = 0;
11 | public void add(Object o) {
12 | if(index == objects.length) {
13 | Object[] newObjects = new Object[objects.length*2];
14 | System.arraycopy(objects, 0, newObjects, 0, objects.length);
15 | objects = newObjects;
16 | }
17 |
18 | objects[index] = o;
19 | index ++;
20 | }
21 |
22 | public int size() {
23 | return index;
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v3/Collection_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v3;
2 |
3 | public interface Collection_ {
4 | void add(Object o);
5 | int size();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v3/LinkedList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v3;
2 |
3 | /**
4 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
5 | */
6 | class LinkedList_ implements Collection_ {
7 | Node head = null;
8 | Node tail = null;
9 | //目前容器中有多少个元素
10 | private int size = 0;
11 |
12 | public void add(Object o) {
13 | Node n = new Node(o);
14 | n.next = null;
15 |
16 | if(head == null) {
17 | head = n;
18 | tail = n;
19 | }
20 |
21 | tail.next = n;
22 | tail = n;
23 | size++;
24 | }
25 |
26 | private class Node {
27 | private Object o;
28 | Node next;
29 |
30 | public Node(Object o) {
31 | this.o = o;
32 | }
33 | }
34 |
35 | public int size() {
36 | return size;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v3/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v3;
2 |
3 | /**
4 | * v1:构建一个容器,可以添加对象
5 | * v2:用链表来实现一个容器
6 | * v3:添加容器的共同接口,实现容器的替换
7 | */
8 |
9 | public class Main {
10 | public static void main(String[] args) {
11 | Collection_ list = new ArrayList_();
12 | for(int i=0; i<15; i++) {
13 | list.add(new String("s" + i));
14 | }
15 | System.out.println(list.size());
16 | }
17 | }
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v4/ArrayList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v4;
2 |
3 |
4 | /**
5 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
6 | */
7 | class ArrayList_ implements Collection_ {
8 | Object[] objects = new Object[10];
9 | //objects中下一个空的位置在哪儿,或者说,目前容器中有多少个元素
10 | private int index = 0;
11 | public void add(Object o) {
12 | if(index == objects.length) {
13 | Object[] newObjects = new Object[objects.length*2];
14 | System.arraycopy(objects, 0, newObjects, 0, objects.length);
15 | objects = newObjects;
16 | }
17 |
18 | objects[index] = o;
19 | index ++;
20 | }
21 |
22 | public int size() {
23 | return index;
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v4/Collection_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v4;
2 |
3 | public interface Collection_ {
4 | void add(Object o);
5 | int size();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v4/LinkedList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v4;
2 |
3 | /**
4 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
5 | */
6 | class LinkedList_ implements Collection_ {
7 | Node head = null;
8 | Node tail = null;
9 | //目前容器中有多少个元素
10 | private int size = 0;
11 |
12 | public void add(Object o) {
13 | Node n = new Node(o);
14 | n.next = null;
15 |
16 | if(head == null) {
17 | head = n;
18 | tail = n;
19 | }
20 |
21 | tail.next = n;
22 | tail = n;
23 | size++;
24 | }
25 |
26 | private class Node {
27 | private Object o;
28 | Node next;
29 |
30 | public Node(Object o) {
31 | this.o = o;
32 | }
33 | }
34 |
35 | public int size() {
36 | return size;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v4/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v4;
2 |
3 | /**
4 | * v1:构建一个容器,可以添加对象
5 | * v2:用链表来实现一个容器
6 | * v3:添加容器的共同接口,实现容器的替换
7 | * v4:如何对容器遍历呢?
8 | */
9 |
10 | public class Main {
11 | public static void main(String[] args) {
12 | Collection_ list = new ArrayList_();
13 | for(int i=0; i<15; i++) {
14 | list.add(new String("s" + i));
15 | }
16 | System.out.println(list.size());
17 |
18 |
19 | ArrayList_ al = (ArrayList_)list;
20 | for(int i=0; i= index) return false;
38 | return true;
39 | }
40 |
41 | @Override
42 | public Object next() {
43 | Object o = objects[currentIndex];
44 | currentIndex ++;
45 | return o;
46 | }
47 | }
48 |
49 |
50 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v5/Collection_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v5;
2 |
3 | public interface Collection_ {
4 | void add(Object o);
5 | int size();
6 |
7 | Iterator_ iterator();
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v5/Iterator_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v5;
2 |
3 | public interface Iterator_ {
4 | boolean hasNext();
5 |
6 | Object next();
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v5/LinkedList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v5;
2 |
3 | /**
4 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
5 | */
6 | class LinkedList_ implements Collection_ {
7 | Node head = null;
8 | Node tail = null;
9 | //目前容器中有多少个元素
10 | private int size = 0;
11 |
12 | public void add(Object o) {
13 | Node n = new Node(o);
14 | n.next = null;
15 |
16 | if(head == null) {
17 | head = n;
18 | tail = n;
19 | }
20 |
21 | tail.next = n;
22 | tail = n;
23 | size++;
24 | }
25 |
26 | private class Node {
27 | private Object o;
28 | Node next;
29 |
30 | public Node(Object o) {
31 | this.o = o;
32 | }
33 | }
34 |
35 | public int size() {
36 | return size;
37 | }
38 |
39 | @Override
40 | public Iterator_ iterator() {
41 | return null;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v5/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v5;
2 |
3 | import java.util.Iterator;
4 |
5 | /**
6 | * v1:构建一个容器,可以添加对象
7 | * v2:用链表来实现一个容器
8 | * v3:添加容器的共同接口,实现容器的替换
9 | * v4:如何对容器遍历呢?
10 | * v4:用一种统一的遍历方式,要求每一个容器都要提供Iterator的实现类
11 | * 作业:实现LinkedList的Iterator
12 | */
13 |
14 | public class Main {
15 | public static void main(String[] args) {
16 | Collection_ list = new ArrayList_();
17 | for(int i=0; i<15; i++) {
18 | list.add(new String("s" + i));
19 | }
20 | System.out.println(list.size());
21 |
22 | //这个接口的调用方式:
23 | Iterator_ it = list.iterator();
24 | while(it.hasNext()) {
25 | Object o = it.next();
26 | System.out.println(o);
27 | }
28 | }
29 | }
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v6/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v6;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.Iterator;
6 |
7 | /**
8 | * v1:构建一个容器,可以添加对象
9 | * v2:用链表来实现一个容器
10 | * v3:添加容器的共同接口,实现容器的替换
11 | * v4:如何对容器遍历呢?
12 | * v4:用一种统一的遍历方式,要求每一个容器都要提供Iterator的实现类
13 | * 作业:实现LinkedList的Iterator
14 | * v6:JDK的容器的Iterator
15 | */
16 |
17 | public class Main {
18 | public static void main(String[] args) {
19 | Collection c = new ArrayList();
20 | for(int i=0; i<15; i++) {
21 | c.add(new String("s" + i));
22 | }
23 |
24 | Iterator it = c.iterator();
25 | while(it.hasNext()) {
26 | System.out.println(it.next());
27 | }
28 | }
29 | }
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v7/ArrayList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v7;
2 |
3 |
4 | /**
5 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
6 | */
7 | class ArrayList_ implements Collection_ {
8 | E[] objects = (E[])new Object[10];
9 | //objects中下一个空的位置在哪儿,或者说,目前容器中有多少个元素
10 | private int index = 0;
11 | public void add(E o) {
12 | if(index == objects.length) {
13 | E[] newObjects = (E[])new Object[objects.length*2];
14 | System.arraycopy(objects, 0, newObjects, 0, objects.length);
15 | objects = newObjects;
16 | }
17 |
18 | objects[index] = o;
19 | index ++;
20 | }
21 |
22 | public int size() {
23 | return index;
24 | }
25 |
26 | @Override
27 | public Iterator_ iterator() {
28 | return new ArrayListIterator();
29 | }
30 |
31 | private class ArrayListIterator implements Iterator_ {
32 |
33 | private int currentIndex = 0;
34 |
35 | @Override
36 | public boolean hasNext() {
37 | if(currentIndex >= index) return false;
38 | return true;
39 | }
40 |
41 | @Override
42 | public E next() {
43 | E o = (E)objects[currentIndex];
44 | currentIndex ++;
45 | return o;
46 | }
47 | }
48 |
49 |
50 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v7/Collection_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v7;
2 |
3 | public interface Collection_ {
4 | void add(E o);
5 | int size();
6 |
7 | Iterator_ iterator();
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v7/Iterator_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v7;
2 |
3 | public interface Iterator_ { //Element //Type //K //Value V Tank
4 | boolean hasNext();
5 |
6 | E next(); //Tank next() Iterator_ it = ... Tank t = it.next();
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v7/LinkedList_.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v7;
2 |
3 | /**
4 | * 相比数组,这个容器不用考虑边界问题,可以动态扩展
5 | */
6 | class LinkedList_ implements Collection_ {
7 | Node head = null;
8 | Node tail = null;
9 | //目前容器中有多少个元素
10 | private int size = 0;
11 |
12 | public void add(Object o) {
13 | Node n = new Node(o);
14 | n.next = null;
15 |
16 | if(head == null) {
17 | head = n;
18 | tail = n;
19 | }
20 |
21 | tail.next = n;
22 | tail = n;
23 | size++;
24 | }
25 |
26 | private class Node {
27 | private Object o;
28 | Node next;
29 |
30 | public Node(Object o) {
31 | this.o = o;
32 | }
33 | }
34 |
35 | public int size() {
36 | return size;
37 | }
38 |
39 | @Override
40 | public Iterator_ iterator() {
41 | return null;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Iterator/v7/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.Iterator.v7;
2 |
3 | /**
4 | * v1:构建一个容器,可以添加对象
5 | * v2:用链表来实现一个容器
6 | * v3:添加容器的共同接口,实现容器的替换
7 | * v4:如何对容器遍历呢?
8 | * v4:用一种统一的遍历方式,要求每一个容器都要提供Iterator的实现类
9 | * 作业:实现LinkedList的Iterator
10 | * v6:JDK的容器实现
11 | * v7:实现泛型版本
12 | */
13 |
14 | public class Main {
15 | public static void main(String[] args) {
16 | Collection_ list = new ArrayList_<>();
17 | for(int i=0; i<15; i++) {
18 | list.add(new String("s" + i));
19 | }
20 | System.out.println(list.size());
21 |
22 | //这个接口的调用方式:
23 | Iterator_ it = list.iterator();
24 | while(it.hasNext()) {
25 | String o = it.next();
26 | System.out.println(o);
27 | }
28 | }
29 | }
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/TemplateMethod/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.TemplateMethod;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | F f = new C1();
6 | f.m();
7 | }
8 |
9 | }
10 |
11 | abstract class F {
12 | public void m() {
13 | op1();
14 | op2();
15 | }
16 |
17 | abstract void op1();
18 | abstract void op2();
19 | }
20 |
21 | class C1 extends F {
22 |
23 | @Override
24 | void op1() {
25 | System.out.println("op1");
26 | }
27 |
28 | @Override
29 | void op2() {
30 | System.out.println("op2");
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/Test.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp;
2 |
3 | import java.awt.*;
4 | import java.awt.event.WindowAdapter;
5 | import java.awt.event.WindowEvent;
6 | import java.awt.event.WindowListener;
7 | import java.util.concurrent.locks.LockSupport;
8 |
9 | public class Test {
10 | public static void main(String[] args) throws Exception {
11 | Thread t = new Thread(()->{
12 | System.out.println("start");
13 | LockSupport.park(); //一直wait
14 | System.out.println("continue");
15 | });
16 | t.start();
17 |
18 | Thread.sleep(1000);
19 | LockSupport.unpark(t); //t线程解除wait态
20 | }
21 | }
22 |
23 | //javap
24 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/AK47.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class AK47 extends Weapon{
4 | public void shoot() {
5 | System.out.println("tututututu....");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/AbastractFactory.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public abstract class AbastractFactory {
4 | abstract Food createFood();
5 | abstract Vehicle createVehicle();
6 | abstract Weapon createWeapon();
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Bread.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class Bread extends Food{
4 | public void printName() {
5 | System.out.println("wdm");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Broom.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class Broom extends Vehicle{
4 | public void go() {
5 | System.out.println("Car go wuwuwuwuw....");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Car.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class Car extends Vehicle{
4 |
5 | public void go() {
6 | System.out.println("Car go wuwuwuwuw....");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Food.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public abstract class Food {
4 | abstract void printName();
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/MagicFactory.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class MagicFactory extends AbastractFactory {
4 | @Override
5 | Food createFood() {
6 | return new MushRoom();
7 | }
8 |
9 | @Override
10 | Vehicle createVehicle() {
11 | return new Broom();
12 | }
13 |
14 | @Override
15 | Weapon createWeapon() {
16 | return new MagicStick();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/MagicStick.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class MagicStick extends Weapon{
4 | public void shoot() {
5 | System.out.println("diandian....");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | AbastractFactory f = new ModernFactory();
6 |
7 | Vehicle c = f.createVehicle();
8 | c.go();
9 | Weapon w = f.createWeapon();
10 | w.shoot();
11 | Food b = f.createFood();
12 | b.printName();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/ModernFactory.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 |
4 | public class ModernFactory extends AbastractFactory {
5 | @Override
6 | Food createFood() {
7 | return new Bread();
8 | }
9 |
10 | @Override
11 | Vehicle createVehicle() {
12 | return new Car();
13 | }
14 |
15 | @Override
16 | Weapon createWeapon() {
17 | return new AK47();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/MushRoom.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public class MushRoom extends Food{
4 | public void printName() {
5 | System.out.println("dmg");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public abstract class Vehicle { //interface
4 | abstract void go();
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/abstractfactory/Weapon.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.abstractfactory;
2 |
3 | public abstract class Weapon {
4 | abstract void shoot();
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/adapter/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.adapter;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.FileInputStream;
5 | import java.io.InputStreamReader;
6 |
7 |
8 | public class Main {
9 | public static void main(String[] args) throws Exception {
10 | FileInputStream fis = new FileInputStream("c:/test.text");
11 | InputStreamReader isr = new InputStreamReader(fis);
12 | BufferedReader br = new BufferedReader(isr);
13 | String line = br.readLine();
14 | while (line != null && !line.equals("")) {
15 | System.out.println(line);
16 | }
17 | br.close();
18 |
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v1/Book.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v1;
2 |
3 | public class Book extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v1/Flower.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v1;
2 |
3 | public class Flower extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v1/GG.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v1;
2 |
3 | public class GG {
4 | public void chase(MM mm) {
5 | Gift g = new Book();
6 | give(mm, g);
7 | }
8 |
9 | public void give(MM mm, Gift g) {
10 |
11 | }
12 |
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v1/Gift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v1;
2 |
3 | public abstract class Gift {}
4 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v1/MM.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v1;
2 |
3 | public class MM {
4 | String name;
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/Book.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class Book extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/Flower.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class Flower extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/GG.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class GG {
4 | public void chase(MM mm) {
5 | Gift g = new Book();
6 | give(mm, g);
7 | }
8 |
9 | public void give(MM mm, Gift g) {
10 |
11 | }
12 |
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/Gift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public abstract class Gift {}
4 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/MM.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class MM {
4 | String name;
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/WarmGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class WarmGift extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/WildGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v2;
2 |
3 | public class WildGift extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v2/readme:
--------------------------------------------------------------------------------
1 | 如果礼物分为温柔的礼物和狂野的礼物
2 | WarmGift WildGift
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/Book.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class Book extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/Flower.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class Flower extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/GG.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class GG {
4 | public void chase(MM mm) {
5 | Gift g = new Book();
6 | give(mm, g);
7 | }
8 |
9 | public void give(MM mm, Gift g) {
10 |
11 | }
12 |
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/Gift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public abstract class Gift {}
4 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/MM.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class MM {
4 | String name;
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/WarmFlower.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | /**
4 | * 或者从WarmGift继承
5 | * 或者从Flower继承
6 | */
7 | public class WarmFlower extends Flower {
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/WarmGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class WarmGift extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/WildGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v3;
2 |
3 | public class WildGift extends Gift {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v3/readme:
--------------------------------------------------------------------------------
1 | 如果礼物分为温柔的礼物和狂野的礼物
2 | WarmGift WildGift
3 | 这时Flower应该分为
4 | WarmFlower WildFlower
5 | WarmBook WildBook
6 |
7 | 如果再有别的礼物,比如抽象类型:ToughGift ColdGift
8 | 或者具体的某种实现:Ring Car
9 |
10 | 就会产生类的爆炸
11 | WarmCar ColdRing WildCar WildFlower ...
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/Book.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class Book extends GiftImpl {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/Flower.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class Flower extends GiftImpl {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/GG.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class GG {
4 | public void chase(MM mm) {
5 | Gift g = new WarmGift(new Flower());
6 | give(mm, g);
7 | }
8 |
9 | public void give(MM mm, Gift g) {
10 | System.out.println(g + "gived!");
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/Gift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public abstract class Gift {
4 | GiftImpl impl;
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/GiftImpl.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class GiftImpl {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/MM.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class MM {
4 | String name;
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/WarmGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class WarmGift extends Gift {
4 | public WarmGift(GiftImpl impl) {
5 | this.impl = impl;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/WildGift.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.bridge.v4;
2 |
3 | public class WildGift extends Gift {
4 | public WildGift(GiftImpl impl) {
5 | this.impl = impl;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/bridge/v4/readme:
--------------------------------------------------------------------------------
1 | 使用桥接模式:
2 | 分离抽象与具体实现,让他们可以独自发展
3 | Gift -> WarmGift ColdGift WildGift
4 | GiftImpl -> Flower Ring Car
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/builder/ComplexTerrainBuilder.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.builder;
2 |
3 | public class ComplexTerrainBuilder implements TerrainBuilder {
4 | Terrain terrain = new Terrain();
5 |
6 | @Override
7 | public TerrainBuilder buildWall() {
8 | terrain.w = new Wall(10, 10, 50, 50);
9 | return this;
10 | }
11 |
12 | @Override
13 | public TerrainBuilder buildFort() {
14 | terrain.f = new Fort(10, 10, 50, 50);
15 | return this;
16 | }
17 |
18 | @Override
19 | public TerrainBuilder buildMine() {
20 | terrain.m = new Mine(10, 10, 50, 50);
21 | return this;
22 | }
23 |
24 | @Override
25 | public Terrain build() {
26 | return terrain;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/builder/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.builder;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | TerrainBuilder builder = new ComplexTerrainBuilder();
6 | Terrain t = builder.buildFort().buildMine().buildWall().build();
7 | //new Terrain(Wall w, Fort f, Mine m)
8 | //Effective Java
9 |
10 | Person p = new Person.PersonBuilder()
11 | .basicInfo(1, "zhangsan", 18)
12 | //.score(20)
13 | .weight(200)
14 | //.loc("bj", "23")
15 | .build();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/builder/Person.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.builder;
2 |
3 | public class Person {
4 | int id;
5 | String name;
6 | int age;
7 | double weight;
8 | int score;
9 | Location loc;
10 |
11 | private Person() {}
12 |
13 | public static class PersonBuilder {
14 | Person p = new Person();
15 |
16 | public PersonBuilder basicInfo(int id, String name, int age) {
17 | p.id = id;
18 | p.name = name;
19 | p.age = age;
20 | return this;
21 | }
22 |
23 | public PersonBuilder weight(double weight) {
24 | p.weight = weight;
25 | return this;
26 | }
27 |
28 | public PersonBuilder score(int score) {
29 | p.score = score;
30 | return this;
31 | }
32 |
33 | public PersonBuilder loc(String street, String roomNo) {
34 | p.loc = new Location(street, roomNo);
35 | return this;
36 | }
37 |
38 | public Person build() {
39 | return p;
40 | }
41 | }
42 | }
43 |
44 | class Location {
45 | String street;
46 | String roomNo;
47 |
48 | public Location(String street, String roomNo) {
49 | this.street = street;
50 | this.roomNo = roomNo;
51 | }
52 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/builder/Terrain.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.builder;
2 |
3 | public class Terrain {
4 | Wall w;
5 | Fort f;
6 | Mine m;
7 | }
8 |
9 | class Wall {
10 | int x, y, w, h;
11 |
12 | public Wall(int x, int y, int w, int h) {
13 | this.x = x;
14 | this.y = y;
15 | this.w = w;
16 | this.h = h;
17 | }
18 | }
19 |
20 | class Fort {
21 | int x, y, w, h;
22 |
23 | public Fort(int x, int y, int w, int h) {
24 | this.x = x;
25 | this.y = y;
26 | this.w = w;
27 | this.h = h;
28 | }
29 |
30 | }
31 |
32 | class Mine {
33 | int x, y, w, h;
34 |
35 | public Mine(int x, int y, int w, int h) {
36 | this.x = x;
37 | this.y = y;
38 | this.w = w;
39 | this.h = h;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/builder/TerrainBuilder.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.builder;
2 |
3 | public interface TerrainBuilder {
4 | TerrainBuilder buildWall();
5 | TerrainBuilder buildFort();
6 | TerrainBuilder buildMine();
7 | Terrain build();
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/cglib/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.cglib;
2 |
3 | import net.sf.cglib.proxy.Enhancer;
4 | import net.sf.cglib.proxy.MethodInterceptor;
5 | import net.sf.cglib.proxy.MethodProxy;
6 |
7 | import java.lang.reflect.Method;
8 | import java.util.Random;
9 |
10 | /**
11 | * CGLIB实现动态代理不需要接口
12 | */
13 | public class Main {
14 | public static void main(String[] args) {
15 | Enhancer enhancer = new Enhancer();
16 | enhancer.setSuperclass(Tank.class);
17 | enhancer.setCallback(new TimeMethodInterceptor());
18 | Tank tank = (Tank)enhancer.create();
19 | tank.move();
20 | }
21 | }
22 |
23 | class TimeMethodInterceptor implements MethodInterceptor {
24 |
25 | @Override
26 | public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
27 |
28 | System.out.println(o.getClass().getSuperclass().getName());
29 | System.out.println("before");
30 | Object result = null;
31 | result = methodProxy.invokeSuper(o, objects);
32 | System.out.println("after");
33 | return result;
34 | }
35 | }
36 |
37 | class Tank {
38 | public void move() {
39 | System.out.println("Tank moving claclacla...");
40 | try {
41 | Thread.sleep(new Random().nextInt(10000));
42 | } catch (InterruptedException e) {
43 | e.printStackTrace();
44 | }
45 | }
46 | }
47 |
48 |
49 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/Command.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | public abstract class Command {
4 | public abstract void doit(); //exec run
5 | public abstract void undo();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/Content.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | public class Content {
4 | String msg = "hello everybody ";
5 |
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/CopyCommand.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | public class CopyCommand extends Command {
4 | Content c;
5 | public CopyCommand(Content c) {
6 | this.c = c;
7 | }
8 |
9 | @Override
10 | public void doit() {
11 | c.msg = c.msg + c.msg;
12 | }
13 |
14 | @Override
15 | public void undo() {
16 | c.msg = c.msg.substring(0, c.msg.length()/2);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/DeleteCommand.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | public class DeleteCommand extends Command {
4 | Content c;
5 | String deleted;
6 | public DeleteCommand(Content c) {
7 | this.c = c;
8 | }
9 |
10 | @Override
11 | public void doit() {
12 | deleted = c.msg.substring(0, 5);
13 | c.msg = c.msg.substring(5, c.msg.length());
14 | }
15 |
16 | @Override
17 | public void undo() {
18 | c.msg = deleted + c.msg;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/InsertCommand.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | public class InsertCommand extends Command {
4 | Content c;
5 | String strToInsert = "http://www.mashibing.com";
6 | public InsertCommand(Content c) {
7 | this.c = c;
8 | }
9 |
10 | @Override
11 | public void doit() {
12 | c.msg = c.msg + strToInsert;
13 | }
14 |
15 | @Override
16 | public void undo() {
17 | c.msg = c.msg.substring(0, c.msg.length()-strToInsert.length());
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/command/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.command;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class Main {
7 | public static void main(String[] args) {
8 | Content c = new Content();
9 |
10 | Command insertCommand = new InsertCommand(c);
11 | insertCommand.doit();
12 | insertCommand.undo();
13 |
14 | Command copyCommand = new CopyCommand(c);
15 | insertCommand.doit();
16 | insertCommand.undo();
17 |
18 | Command deleteCommand = new DeleteCommand(c);
19 | deleteCommand.doit();
20 | deleteCommand.undo();
21 |
22 | List commands = new ArrayList<>();
23 | commands.add(new InsertCommand(c));
24 | commands.add(new CopyCommand(c));
25 | commands.add(new DeleteCommand(c));
26 |
27 | for(Command comm : commands) {
28 | comm.doit();
29 | }
30 |
31 |
32 | System.out.println(c.msg);
33 |
34 | for(int i= commands.size()-1; i>=0; i--) {
35 | commands.get(i).undo();
36 | }
37 |
38 |
39 | System.out.println(c.msg);
40 | }
41 | }
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/composite/Main.java:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.composite;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | abstract class Node {
7 | abstract public void p();
8 | }
9 |
10 | class LeafNode extends Node {
11 | String content;
12 | public LeafNode(String content) {this.content = content;}
13 |
14 | @Override
15 | public void p() {
16 | System.out.println(content);
17 | }
18 | }
19 |
20 | class BranchNode extends Node {
21 | List nodes = new ArrayList<>();
22 |
23 | String name;
24 | public BranchNode(String name) {this.name = name;}
25 |
26 | @Override
27 | public void p() {
28 | System.out.println(name);
29 | }
30 |
31 | public void add(Node n) {
32 | nodes.add(n);
33 | }
34 | }
35 |
36 |
37 | public class Main {
38 | public static void main(String[] args) {
39 |
40 | BranchNode root = new BranchNode("root");
41 | BranchNode chapter1 = new BranchNode("chapter1");
42 | BranchNode chapter2 = new BranchNode("chapter2");
43 | Node r1 = new LeafNode("r1");
44 | Node c11 = new LeafNode("c11");
45 | Node c12 = new LeafNode("c12");
46 | BranchNode b21 = new BranchNode("section21");
47 | Node c211 = new LeafNode("c211");
48 | Node c212 = new LeafNode("c212");
49 |
50 | root.add(chapter1);
51 | root.add(chapter2);
52 | root.add(r1);
53 | chapter1.add(c11);
54 | chapter1.add(c12);
55 | chapter2.add(b21);
56 | b21.add(c211);
57 | b21.add(c212);
58 |
59 | tree(root, 0);
60 |
61 | }
62 |
63 | static void tree(Node b, int depth) {
64 | for(int i=0; i,欢迎访问 mashibing.com ,大家都是996 ");
10 |
11 | FilterChain fc = new FilterChain();
12 | fc.add(new HTMLFilter())
13 | .add(new SensitiveFilter());
14 |
15 | FilterChain fc2 = new FilterChain();
16 | fc2.add(new FaceFilter()).add(new URLFilter());
17 |
18 | fc.add(fc2);
19 |
20 | fc.doFilter(msg);
21 | System.out.println(msg);
22 |
23 | }
24 | }
25 |
26 | class Msg {
27 | String name;
28 | String msg;
29 |
30 | public String getMsg() {
31 | return msg;
32 | }
33 |
34 | public void setMsg(String msg) {
35 | this.msg = msg;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Msg{" +
41 | "msg='" + msg + '\'' +
42 | '}';
43 | }
44 | }
45 |
46 | interface Filter {
47 | boolean doFilter(Msg m);
48 | }
49 |
50 | class HTMLFilter implements Filter {
51 | @Override
52 | public boolean doFilter(Msg m) {
53 | String r = m.getMsg();
54 | r = r.replace('<', '[');
55 | r = r.replace('>', ']');
56 | m.setMsg(r);
57 | return true;
58 | }
59 | }
60 |
61 | class SensitiveFilter implements Filter {
62 | @Override
63 | public boolean doFilter(Msg m) {
64 | String r = m.getMsg();
65 | r = r.replaceAll("996", "955");
66 | m.setMsg(r);
67 | return false;
68 | }
69 | }
70 |
71 | class FaceFilter implements Filter {
72 | @Override
73 | public boolean doFilter(Msg m) {
74 | String r = m.getMsg();
75 | r = r.replace(":)", "^V^");
76 | m.setMsg(r);
77 | return true;
78 | }
79 | }
80 |
81 | class URLFilter implements Filter {
82 | @Override
83 | public boolean doFilter(Msg m) {
84 | String r = m.getMsg();
85 | r = r.replace("mashibing.com", "http://www.mashibing.com");
86 | m.setMsg(r);
87 | return true;
88 | }
89 | }
90 |
91 | class FilterChain implements Filter {
92 | private List filters = new ArrayList<>();
93 |
94 | public FilterChain add(Filter f) {
95 | filters.add(f);
96 | return this;
97 | }
98 |
99 | public boolean doFilter(Msg m) {
100 | for(Filter f : filters) {
101 | if(!f.doFilter(m)) return false;
102 | }
103 |
104 | return true;
105 | }
106 | }
--------------------------------------------------------------------------------
/src/main/java/com/mashibing/dp/cor/Main.java.bak:
--------------------------------------------------------------------------------
1 | package com.mashibing.dp.cor;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class Main {
7 | public static void main(String[] args) {
8 |
9 |
10 | Msg m = new Msg();
11 | m.setMessage("大家好:),欢迎大家访问 mashibing.com ,大家伙儿基本996哦,