1. 程式人生 > 資訊 >納微半導體成立全球首家電動車氮化鎵功率晶片設計中心,650V GaN IC 已出樣

納微半導體成立全球首家電動車氮化鎵功率晶片設計中心,650V GaN IC 已出樣

OOP七大原則

1、單例模式

核心作用:保證一個類只有一個例項,並且提供一個訪問該例項的全域性訪問點

餓漢模式

// 餓漢式單例
public class Hungry{
	// 可能會浪費空間
	private Hungry(){}
	
	private final static Hungry HUNGRY = new Hungry();
	
	public static Hungry getInstance(){
		return HUNGRY;
	}
}

懶漢模式

// 懶漢式單例
public class LazyMan{
	
	private LazyMan(){}
	
	private volatile static LazyMan lazyMan;
	
	// 雙重檢測鎖模式的懶漢式單例  DCL 懶漢式
	public static LazyMan getInstance(){
		if(lazyMan==null){
			synchronized (LazyMan.class){
				if(lazyMan==null){
					lazyMan = new LazyMan();
				}
			}
		}
		return lazyMan;
	}
}

靜態內部類單例

// 靜態內部類單例
public class Holder{
	
	private Holder(){}
	
	public static Holder getInstace(){
		return InnerClass.HOLDER;
	}
	
	public static class InnerClass{
		private static final Holder HOLDER = new Holder();
	}
}

列舉單例

// enum 本身也是一個Class類
public enum EnumSingle{
	
	INSTANCE;
	
	public EnumSingle getInstance(){
		return INSTANCE;
	}
}

2、工廠模式

作用:實現了建立者和呼叫者的分離

詳細分類:簡單工廠模式、工廠方法模式、抽象工廠模式

OOP七大原則:
開閉原則:一個軟體的實體應當對擴充套件開放,對修改關閉
依賴倒轉原則:要針對介面程式設計,不要針對實現程式設計
地米特法則:只與你直接的朋友通訊,而避免和陌生人通訊

簡單工廠模式

public interface Car{
	void name();
}

public class WuLing implements Car{
	@Override
	public void name(){
		System.out.println("五菱巨集光");
	}
}

public class Tesla implements Car{
	@Override
	public void name(){
		System.out.println("特斯拉");
	}
}

// 簡單工廠,靜態工廠模式
// 增加一個新的產品,如果你不修改程式碼,做不到
// 沒有滿足開閉原則
public class CarFactory{
	public static Car getCar(String car){
		if(car.equals("五菱")){
			return new WuLing();
		}else if(car.equals("特斯拉")){
			return new Tesla();
		}else{
			return null;
		}
	}
}

工廠方法模式

public interface Car{
	void name();
}

public class WuLing implements Car{
	@Override
	public void name(){
		System.out.println("五菱巨集光");
	}
}

public class Tesla implements Car{
	@Override
	public void name(){
		System.out.println("特斯拉");
	}
}

// 工廠方法模式
public interface CarFactory{
	Car getCar();
}

public class WuLingFactory implements CarFactory{
	@Override
	public Car getCar(){
		return new WuLing();
	}
}

public class TeslaFactory implements CarFactory{
	@Override
	public Car getCar(){
		return new Tesla();
	}
}

根據設計原則:工廠方法模式
根據實際業務:簡單工廠模式

抽象工廠模式

定義:抽象工廠模式提供了一個建立一系列相關或者相互依賴物件的介面,無需指定它們具體的類

// 手機產品介面
public interface IphoneProduct{
	void start();
	void shutdown();
	void callup();
	void sendSMS();
}
// 路由器產品介面
public interface IRouterProduct{
	void start();
	void shutdown();
	void openWifi();
	void setting();
}
// 小米手機
public class XiaomiPhone implements IphoneProduct{
	@Override
	public void start(){
		System.out.println("開啟小米手機");
	}
	@Override
	public void shutdown(){
		System.out.println("關閉小米手機");
	}
	@Override
	public void callup(){
		System.out.println("小米打電話");
	}
	@Override
	public void sendSMS(){
		System.out.println("小米發簡訊");
	}
}
// 華為手機
public class HuaweiPhone implements IphoneProduct{
	@Override
	public void start(){
		System.out.println("開啟華為手機");
	}
	@Override
	public void shutdown(){
		System.out.println("關閉華為手機");
	}
	@Override
	public void callup(){
		System.out.println("華為打電話");
	}
	@Override
	public void sendSMS(){
		System.out.println("華為發簡訊");
	}
}
// 小米路由器
public class XiaomiRouter implements IRouterProduct{
	@Override
	public void start(){
		System.out.println("啟動小米路由器");
	}
	@Override
	public void shutdown(){
		system.out.println("關閉小米路由器");
	}
	@Override
	public void openWifi(){
		System.out.println("開啟小米wifi");
	}
	@Override
	public void setting(){
		System.out.println("小米設定");
	}
}
// 華為路由器
public class HuaweiRouter implements IRouterProduct{
	@Override
	public void start(){
		System.out.println("啟動華為路由器");
	}
	@Override
	public void shutdown(){
		system.out.println("關閉華為路由器");
	}
	@Override
	public void openWifi(){
		System.out.println("開啟華為wifi");
	}
	@Override
	public void setting(){
		System.out.println("華為設定");
	}
}
// 抽象產品工廠
public interface IProductFactory{
	// 生產手機
	IphoneProduct iphoneProduct();
	
	// 生產路由器
	IRouterProduct routerProduct();
}
// 小米工廠
public class XiaomiFactory implements IProductFactory{
	@Override
	public IphoneProduct iphoneProduct(){
		return new XiaomiPhone();
	}
	@Override
	public IRouterProduct routerProduct(){
		return new XiaomiRouter();
	}
}
// 華為工廠
public class HuaweiFactory implements IProductFactory{
	@Override
	public IphoneProduct iphoneProduct(){
		return new HuaweiPhone();
	}
	@Override
	public IRouterProduct routerProduct(){
		return new HuaweiRouter();
	}
}
// 測試
public class Test{
	public static void main(String[] args){
		//建立小米工廠
		XiaomiFactory xiaomiFactory = new XiaomiFactory();
		IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
		iphoneProduct.callup();
		iphoneProduct.sendSMS();
		IRouteProduct iRouterProduct = xiaomiFactory.routerProduct();
		iRouterProduct.openWifi();
	}
}

優點:
具體產品在應用層的程式碼隔離,無需關心建立細節
將一個系列的產品統一到一起建立

缺點:
規定了所有可能被建立的產品集合,產品簇中擴充套件最新的產品困難
增加了系統的抽象性和理解難度