一點點從基礎做起,23中設計模式一天看一個
首先學習了一個UML,但是沒有能下到RationalRose,想去官網上下載,但是似乎收費,索性就用手頭上的StartUML,其實就是一個工具,能實現就行了
SimpleFactory——簡單設計模式原理圖


~~~
package com.designpattern.simplefactory;
public class Client {
public static void main(String[] args) {
Animal tiger = SimpleFactory.createAnimal("Tiger");
tiger.eat();
Animal dolphin = SimpleFactory.createAnimal("Dolphin");
dolphin.eat();
}
}
~~~
~~~
package com.designpattern.simplefactory;
public class SimpleFactory {
public static Animal createAnimal(String animalName) {
if ("Tiger".equals(animalName)) {
return new Tiger();
} else if ("Dolphin".equals(animalName)) {
return new Dolphin();
}
return null;
}
}
~~~
~~~
package com.designpattern.simplefactory;
public interface Animal {
public void eat();
}
~~~
~~~
package com.designpattern.simplefactory;
public class Dolphin implements Animal {
@Override
public void eat() {
System.out.println("Dolphin is eating");
}
public void swim() {
System.out.println("Dolphin is swimming");
}
}
~~~
~~~
package com.designpattern.simplefactory;
public class Tiger implements Animal {
@Override
public void eat() {
System.out.println("Tiger is eating");
}
public void run() {
System.out.println("Tiger is running");
}
}
~~~
簡單工廠設計模式中,客戶端不在負責對象的創建,而是把這個任務丟給了具體的工廠類,客戶端置負責對對象的簡單的調用,從而明確了各個類的職責。
由于簡單的工廠模式使用靜態的方法來創建對象,這就導致了靜態方法無法被繼承。另一方面,這個工廠類負責所有對象的創建,這回導致雖然具體的產品的不斷增多,可能客戶端對于某些產品的創建方式會有不同的要求,這樣的話,就要不斷的修改工廠類,增加了相應的判斷邏輯,不利于后期的維護。
其實從這個簡單的工廠模式的原理可以看出,原來在客戶端要做的創建和初始化工作都被移到了工廠里去做,這樣做,雖然是把創建對象和初始化工作于客戶端分離了,實現了這部分的責任分配,但所有對象創建和初始化的工作還是都集中在了這個具體的工廠類里面,這樣如果要創建的對象很多,這個工廠將會非常龐大,仍然不利于后期代碼的維護。因此簡單工廠模式只是使用與要創建的對象比較少和簡單的時候,因此這個設計模式看一下過去就行了,也沒有必要再這個上面下多大功夫,畢竟還是比較簡單的東西,如果多了怎么辦呢,這樣就到了期待的下一個設計模式Factory Method
- 前言
- 前言(目錄、源碼、資料)
- (一)簡單工廠模式(SimpleFatory)
- (二)工廠方法模式(FactoryMethod)
- (三)抽象工廠模式(AbstractFactory)
- (四)創建者模式(Builder)
- (五)原型模式(Prototype)
- (六)單例模式(Singleton)
- (七)外觀模式(Facade)
- (八)適配器模式(Adapter)
- (九)代理模式(Proxy)
- (十)裝飾模式(Decorator)
- (十一)橋模式(birdge)
- (十二)組合模式(Composite)
- (十三)享元模式(Flyweight)
- (十四)模板方法模式(Template)
- (十五)觀察者模式(Observer)
- (十六)狀態模式(State)