工廠設計模式與代理設計模式【帶樣例】
工廠設計模式
先來看看一個程式碼:
/** 食物介面 */
interface IFood{
public void eat();
}
/** 米飯類,實現食物介面 */
class Rice implements IFood{
@Override
public void eat() {
System.out.println("吃米飯咯!");
}
}
public class Main {
public static void main(String[] args) {
IFood ifood = new Rice();
ifood.eat();
}
}
很簡單的一段程式碼
但是客戶端要明確知道具體的哪一個子類,如果說現在吃膩了米飯,改吃麵條了,那麼客戶端就要做出修改
如下:
這種問題稱之為“耦合問題”,是因為關鍵字“new ”造成了耦合問題
如何解決?
工廠(factory)設計實現
觀察程式碼:
/** 食物介面 */
interface IFood{
public void eat();
}
/** 米飯類,實現食物介面 */
class Rice implements IFood{
@Override
public void eat() {
System.out.println("吃米飯咯!");
}
}
/** 麵條類 */
class Noodle implements IFood{
@Override
public void eat() {
System.out.println("吃麵條咯!");
}
}
/** 工廠設計 */
class Factory{
public IFood getDemo(String className){
if("rice".equals(className)){
return new Rice();
}
if("noodle".equals(className)){
return new Noodle();
}
return null;
}
}
public class Main {
public static void main(String[] args) {
Factory factory = new Factory();
IFood food = factory.getDemo("noodle");
food.eat();
}
}
輸出結果:
這樣我們就成功地改吃麵條了
翻篇了
代理設計模式(proxy):
作用:幫助使用者將所有的開發注意力只集中在核心業務功能的
例如,肚子餓了,就只關注吃東西,不管吃啥
觀察程式碼:
/** 吃介面 */
interface IEat{
public void get();
}
/** 代理設計 */
class eatProxy implements IEat{
private IEat eat;
/** 構造方法 */
public eatProxy(IEat eat){
this.eat = eat;
}
@Override
public void get() {
this.prepare();
this.eat.get();
this.clear();
}
/** 前期準備 */
public void prepare(){
System.out.println("【代理主題】:正在為您準備食材!");
System.out.println("【代理主題】:正在做菜!");
}
/** 後期收拾 */
public void clear(){
System.out.println("【代理主題】:正在收拾碗筷!");
}
}
/** 吃 */
class Eat implements IEat{
@Override
public void get() {
System.out.println("【真實主題】:得到了一頓飯!");
}
}
public class Main {
public static void main(String[] args) {
IEat iEat = new eatProxy(new Eat());
iEat.get();
}
}
執行結果:
我們可以發現,
代理設計模式的主要特點是:一個介面提供有兩個子類,其中一個是真實的業務操作子類(只管吃),另一個是負責其他服務的代理子類(做飯、洗碗操作),真實業務在代理業務上進行,沒有代理業務,真實業務無法進行
程式碼編譯器:IntelliJ IDEA 2020.02
相關文章
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- 設計模式 —— 工廠模式設計模式
- 設計模式(工廠模式)設計模式
- 設計模式----工廠模式設計模式
- 【設計模式】工廠模式設計模式
- 設計模式-工廠模式設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 設計模式之單例、工廠、釋出訂閱者模式設計模式設計模式單例
- 反射與工廠設計模式反射設計模式
- 一.設計模式之工廠設計模式設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 不一樣的工廠模式(設計模式六)設計模式
- 設計模式 - 工廠方法模式設計模式
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- Java 設計模式(工廠模式)Java設計模式
- PHP設計模式-- 工廠模式PHP設計模式
- 【設計模式】工廠方法模式設計模式
- 設計模式 #2 (工廠模式)設計模式
- java設計模式 – 工廠模式Java設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式——抽象工廠模式設計模式抽象
- Java設計模式(工廠模式)Java設計模式
- Java設計模式-工廠模式Java設計模式
- 設計模式之【工廠模式】設計模式
- Java設計模式--工廠模式Java設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式之工廠模式設計模式
- JavaScript設計模式與實踐–工廠模式JavaScript設計模式
- JavaScript設計模式與實踐--工廠模式JavaScript設計模式
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Java設計模式學習筆記——工廠模式與抽象工廠模式Java設計模式筆記抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式 - 簡單工廠模式設計模式
- Javascript設計模式(二)工廠模式JavaScript設計模式
- java設計模式–抽象工廠模式Java設計模式抽象
- 設計模式之工廠模式(一)設計模式