Javaのトップクラスのプログラマーになるには、まず次の問題をクリアしました。(十)
5718 ワード
十、設計モードと再構成
1.よくあるデザインの例を挙げてください。
1)ワンケースモード(Spring Bern)2)抽象工場モードと工場モード(BeanFactory)3)アダプターモード(Android中のView Adapter)4)装飾モード(java io中のInputStream/OutputStream/Reader/Writer)5)観察者モード6)外観モード7代理(javaダイナミックエージェント)
2.工場のカバンを設計する時、どのような原則を守りますか?
3.Visitor/Decoratorモードを使ったオープンソースの項目/ライブラリを列挙してもらえますか?
4.符号化する時に一番よく使うデザインは何ですか?どんなシーンで使いますか?
5.どのように一つの例を実現しますか?
Hi、またJavaの一例について話しましょう。
8.JDKソースの中には何か印象的なデザインパターンがありますか?例を挙げてみてください。
カタログリスト一、データ構造とアルゴリズム基礎二、Java基礎三、JVM四、マルチスレッド/合併五、Linux使用と問題分析排診六、枠組み使用七、データベース関連八、ネットワークプロトコルとネットワークプログラミング九、Redisなどキャッシュシステム/ミドルウェア/NoSQL/整合性Hashなど十、設計モードと再構成本稿は知文Javaのトッププログラマーになって、まず以下の問題をクリアしました。
1.よくあるデザインの例を挙げてください。
1)ワンケースモード(Spring Bern)2)抽象工場モードと工場モード(BeanFactory)3)アダプターモード(Android中のView Adapter)4)装飾モード(java io中のInputStream/OutputStream/Reader/Writer)5)観察者モード6)外観モード7代理(javaダイナミックエージェント)
2.工場のカバンを設計する時、どのような原則を守りますか?
3.Visitor/Decoratorモードを使ったオープンソースの項目/ライブラリを列挙してもらえますか?
4.符号化する時に一番よく使うデザインは何ですか?どんなシーンで使いますか?
5.どのように一つの例を実現しますか?
Hi、またJavaの一例について話しましょう。
// (Eager initialization) 。 : lazy loading.
public static class EagerInitializationSingleton {
//1. ,
private EagerInitializationSingleton() {
}
//2. , private static
private static EagerInitializationSingleton instance = new EagerInitializationSingleton();
//3. , public static
public static EagerInitializationSingleton getInstance() {
return instance;
}
}
/*
*
* : , ,
* , ,
*/
public static class LazyInitializationSingleton {
//1. ,
private LazyInitializationSingleton() {
}
//2. , private static
private static LazyInitializationSingleton instance;
//3. , public static
public static LazyInitializationSingleton getInstance() {
if (instance == null) {
instance = new LazyInitializationSingleton();
}
return instance;
}
}
/*
*
* 99% ,
*/
public static class LazyInitialization2Singleton {
private static volatile LazyInitialization2Singleton instance;
private LazyInitialization2Singleton() {
}
public static synchronized LazyInitialization2Singleton getInstance() {
if (instance == null) {
instance = new LazyInitialization2Singleton();
}
return instance;
}
}
/*
* (Double-Check)
* volatile 。
*/
public static class LazyInitialization3Singleton {
private static volatile LazyInitialization3Singleton instance;
private LazyInitialization3Singleton() {
}
public static LazyInitialization3Singleton getInstance() {
if (instance == null) {
synchronized (LazyInitialization3Singleton.class) {
if (instance == null) {
instance = new LazyInitialization3Singleton();
}
}
}
return instance;
}
}
// Effective Java
public static class EffectiveJava1Singleton {
private static class SingletonHolder {
private static final EffectiveJava1Singleton INSTANCE = new EffectiveJava1Singleton();
}
private EffectiveJava1Singleton() {
}
public static final EffectiveJava1Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
// Effective Java
//
//EffectiveJava2Singleton.INSTANCE.fun1();
public enum EffectiveJava2Singleton {
INSTANCE;
public void fun1() {
// do something
}
}
6.代理モード(ダイナミックエージェント)public interface UserService {
public String getName(int id);
public Integer getAge(int id);
}
public class UserServiceImpl implements UserService {
@Override
public String getName(int id) {
System.out.println("------getName------");
return "Tom";
}
@Override
public Integer getAge(int id) {
System.out.println("------getAge------");
return 10;
}
}
public class MyInvocationHandler implements InvocationHandler {
private Object target;
MyInvocationHandler() {
super();
}
MyInvocationHandler(Object target) {
super();
this.target = target;
}
@Override
public Object invoke(Object o, Method method, Object[] args) throws Throwable {
if("getName".equals(method.getName())){
System.out.println("++++++before " + method.getName() + "++++++");
Object result = method.invoke(target, args);
System.out.println("++++++after " + method.getName() + "++++++");
return result;
}else{
Object result = method.invoke(target, args);
return result;
}
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Main1 {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
InvocationHandler invocationHandler = new MyInvocationHandler(userService);
UserService userServiceProxy = (UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),
userService.getClass().getInterfaces(), invocationHandler);
System.out.println(userServiceProxy.getName(1));
System.out.println(userServiceProxy.getAge(1));
}
}
7.一例モード(怠け者モード、同時初期化はどのように解決しますか?volatileとlockの使用)8.JDKソースの中には何か印象的なデザインパターンがありますか?例を挙げてみてください。
カタログリスト一、データ構造とアルゴリズム基礎二、Java基礎三、JVM四、マルチスレッド/合併五、Linux使用と問題分析排診六、枠組み使用七、データベース関連八、ネットワークプロトコルとネットワークプログラミング九、Redisなどキャッシュシステム/ミドルウェア/NoSQL/整合性Hashなど十、設計モードと再構成本稿は知文Javaのトッププログラマーになって、まず以下の問題をクリアしました。