Javaの----インタフェースと共通のデザインパターン

インターフェース

  これは、抽象クラスの特別な種類として理解することができます。interfaceキーワードは、インターフェイスを定義して使用してください。
  抽象クラス:機能を備えたものです。
  インターフェース:それは余分な機能を持っているものです。
  それらの間の選択は、インターフェースは抽象クラス、親クラスの機能を達成するためのメンバ関数を持っている場合、唯一の関数定義関数は、サブクラスを持つことができますがあり、お勧めしますが、実装されていません。

インタフェースの利点:

  1. コードの再利用性を向上させます。
  2. デカップリング。
  3. カスタムプログラミング仕様。
  4. マルチインタフェースの実装。

前jdk1.7ではと:
  属性:使用のpublic static finalのpublic static定数変更。
    変更は書くことはできませんが、デフォルトがあります。
    例えば:のpublic static final int型のA = 5;
    とは= 5 int型;同じです。
  方法:パブリック抽象パブリック抽象メソッドの変更。
    変更は書くことはできませんが、デフォルトがあります。
    例えば:パブリック抽象無効笑を() ;
    及び笑を(int型);それは抽象的です。
  注意:

  1. インタフェースは、インスタンス化することはできません。
  2. インターフェースはキーワード道具を使用して、インターフェイスを実装、実装する必要があり、(多くの継承のような)インタフェース機能を持つようにインターフェイスを実装しています。
  3. インタフェース使用した:
    1)特定のカテゴリ:このインターフェイス+新しい需要のすべての抽象メソッドを書き換える必要があり、インターフェイスを実装しています。
    2)抽象クラスの実装は、抽象特徴+書き換え可能な部分は、必要に応じて添加しました。
  4. クラスでは唯一のインタフェースが継承することができない、インターフェイスを実装することができますが、唯一のクラスを継承できるクラスは、クラスA、単一継承クラス、インターフェイスなどを実装するクラスを達成することはできません。
  5. 継承することができないインタフェースと実装クラスは、インターフェイスのみを実装することができないインタフェースを継承することができるインタフェースは、インタフェースは、複数の継承インターフェイスとすることができます。
  6. 相続後の最初のクラスを実現。

jdk1.8の新機能:

  1. 静的メソッドは、
    使用します。インターフェイスは、名前だけで呼び出すことができます
  2. デフォルトの方法で
    使用することは:唯一のオブジェクトクラスを実装することにより、使用します

一般的なデザインパターン

シングルトン:クラスのみのインスタンスを構築することができます保証。
  空腹中国風:あなたは、クラスのインスタンス最初にロードされる作成-スレッドセーフ
  怠惰なタイプ:インスタンスを作成する関数の最初の呼び出し-スレッドセーフな、高効率の
  実装手順:

  1. コンストラクタの民営化
  2. プライベート静的クラスを参照
  3. パブリック静的アクセス方法
//饿汉式单例
public class Single {
	//2.私有的静态的该类的引用
	private static Single single=new Single();
	//1.构造器私有化
	private Single(){  //不允许随意再外部创建对象
	}
	//3.公共的静态的访问方式
	public static Single newInstance(){
		return single;
	}
	//懒汉式单例
	public class SingleTon {
	//2.私有的静态的该类的引用
	private static SingleTon single=null;
	//1.私有构造
	private SingleTon(){}
	//3.公共静态的访问方式
	//A B C
	/*public  static SingleTon newInstance(){
		//A B C
		if(single==null){
			// A B C
			single=new SingleTon();
		}
		return single;
	}*/
	//锁方法
	/*public synchronized static SingleTon newInstance(){
		//A B C
		if(single==null){
			// A B C
			single=new SingleTon();
		}
		return single;
	}*/
	//锁代码块
	public static SingleTon newInstance(){
		//A B C
		synchronized (SingleTon.class) {
			if(single==null){
				// A B C
				single=new SingleTon();
			}
		}
		return single;
	}
}
	public class Test {//测试类
	public static void main(String[] args) {
		Single single1=Single.newInstance();
		Single single2=Single.newInstance();
		System.out.println(single1==single2);  //true
		
		SingleTon s1=SingleTon.newInstance();
		SingleTon s2=SingleTon.newInstance();
		System.out.println(s1==s2);            //true
	}
}

静的プロキシモード

  • 本当の役割:プロジェクトマネージャー
  • 演技の役割:時間
  • エージェントの行動

プロキシモードの特徴:
  1。本当の役割とエージェントの役割が同じインターフェイスを実装|親
  2.エージェントの役割は、真の文字参照を保持
  3.エージェントの行動を

public class StaticProxy {
	public static void main(String[] args) {
		UserManager UserManager=new UserManager();
		Hr hr=new Hr(UserManager);
		hr.addUser();
	}
}
//相同的接口
interface AddUser{
	void addUser();
}
//真实角色:项目经理
class UserManager implements AddUser{
	@Override
	public void addUser() {
		System.out.println("项目经理录用人");
	}
}
//代理角色:hr
class Hr implements AddUser{
	//代理角色持有真实角色的引用
	private UserManager manager;
	public Hr() {
		// TODO Auto-generated constructor stub
	}
	public Hr(UserManager manager) {
		super();
		this.manager = manager;
	}
	@Override
	public void addUser() {
		System.out.println("------筛选简历---------");
		System.out.println("------通知面试---------");
		manager.addUser();
		System.out.println("---------------------");
	}
}

シンプル工場パターン
  抽象製品の役割:特定の製品の役割のインタフェースを実装|親クラスを継承します。

public class Factory {
	public static void main(String[] args) {
		//接口多态  接口指向不同的实现类
		Car car=factory("BMW");
		car.run();
	}
	//工厂
	public static Car factory(String type){
		Car car=null;
		if("Mes".equals(type)){ //比较字符串的内容使用equals方法
			car=new Mes();
		}else{
			car=new BMW();
		}
		return car;
	}
}
//抽象产品角色
interface Car{
	void run();
}
//具体产品角色
class BMW implements Car{
	@Override
	public void run() {
		System.out.println("坐在..哭");
	}
}
class Mes implements Car{
	@Override
	public void run() {
		System.out.println("坐在引擎盖上哭...");
	}
}

おすすめ

転載: blog.csdn.net/qq_41899248/article/details/90809677