File tree Expand file tree Collapse file tree 8 files changed +133
-0
lines changed
design-pattern/src/main/java/com/phint2/pattern/structural/proxy Expand file tree Collapse file tree 8 files changed +133
-0
lines changed Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .protection ;
2+
3+ public class Client {
4+
5+ public static void main (String [] args ) {
6+ UserService admin = new UserServiceProxy ("phint" , "admin" );
7+ admin .load ();
8+ admin .insert ();
9+
10+ UserService customer = new UserServiceProxy ("customer" , "guest" );
11+ customer .load ();
12+ customer .insert ();
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .protection ;
2+
3+ public interface UserService {
4+
5+ void load ();
6+ void insert ();
7+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .protection ;
2+
3+ public class UserServiceImpl implements UserService {
4+
5+ private String name ;
6+
7+ public UserServiceImpl (String name ) {
8+ this .name = name ;
9+ }
10+
11+ @ Override
12+ public void load () {
13+ System .out .println (name + " loaded" );
14+ }
15+
16+ @ Override
17+ public void insert () {
18+ System .out .println (name + " inserted" );
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .protection ;
2+
3+ public class UserServiceProxy implements UserService {
4+
5+ private static final String ADMIN = "admin" ;
6+ private String role ;
7+ private UserService userService ;
8+
9+ public UserServiceProxy (String name , String role ) {
10+ this .role = role ;
11+ this .userService = new UserServiceImpl (name );
12+ }
13+
14+ @ Override
15+ public void load () {
16+ userService .load ();
17+ }
18+
19+ @ Override
20+ public void insert () {
21+ if (isAdmin ()) {
22+ userService .insert ();
23+ } else {
24+ throw new IllegalAccessError ("Access denied" );
25+ }
26+ }
27+
28+ private boolean isAdmin () {
29+ return ADMIN .equalsIgnoreCase (this .role );
30+ }
31+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .virtual ;
2+
3+ public class Client {
4+
5+ public static void main (String [] args ) {
6+ System .out .println ("Init proxy image: " );
7+ ProxyImage proxyImage = new ProxyImage ("abc.com" );
8+
9+ System .out .println ("---" );
10+ System .out .println ("Call real service 1st: " );
11+ proxyImage .showImage ();
12+
13+ System .out .println ("---" );
14+ System .out .println ("Call real service 2nd: " );
15+ proxyImage .showImage ();
16+ }
17+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .virtual ;
2+
3+ public interface Image {
4+
5+ void showImage ();
6+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .virtual ;
2+
3+ public class ProxyImage implements Image {
4+
5+ private RealImage realImage ;
6+ private String url ;
7+
8+ public ProxyImage (String url ) {
9+ this .url = url ;
10+ System .out .println ("Image unloaded: " + this .url );
11+ }
12+
13+ @ Override
14+ public void showImage () {
15+ if (null == realImage ) {
16+ realImage = new RealImage (this .url );
17+ } else {
18+ System .out .println ("Image already existed: " + this .url );
19+ }
20+ realImage .showImage ();
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ package com .phint2 .pattern .structural .proxy .virtual ;
2+
3+ public class RealImage implements Image {
4+
5+ private String url ;
6+
7+ public RealImage (String url ) {
8+ this .url = url ;
9+ System .out .println ("Image loaded: " + this .url );
10+ }
11+
12+ @ Override
13+ public void showImage () {
14+ System .out .println ("Image showed: " + this .url );
15+ }
16+ }
You can’t perform that action at this time.
0 commit comments