設計模式二之工廠模式
工廠模式可以分為
簡單工廠模式(也叫靜態工廠模式),工廠方法模式,抽象工廠模式
1,不使用任何工廠模式,直接呼叫類的建構函式建立例項,缺點是耦合度太高
/**
不使用工廠模式,直接呼叫類的建構函式
*/
public interface Car {
void make();
}
public class Benz implements Car{
public Benz() {
make();
}
@Override
public void make() {
System.out.println("make Benz");
}
}
public class Bmw implements Car{
public Bmw() {
make();
}
@Override
public void make() {
System.out.println("make Bmw");
}
}
public class Client {
public static void main(String[] args) {
new Benz();
new Bmw();
}
}
2.使用簡單工廠模式(靜態工廠模式),就是將建立例項的過程交給工廠,只需要告訴工廠需要什麼產品,就可以得到對應的例項了。缺點是,如果需要新增新的產品,那工廠類的程式碼就需要跟著更改。
public interface Car {
void make();
}
public class Benz implements Car{
public Benz() {
make();
}
@Override
public void make() {
System.out.println("make Benz");
}
}
public class Bmw implements Car{
public Bmw() {
make();
}
@Override
public void make() {
System.out.println("make Bmw");
}
}
public class SimpleFactory {
public static void make(String band){
if ("Benz".equals(band)){
new Benz();
}else if ("Bmw".equals(band)){
new Bmw();
}
}
}
public class Client {
public static void main(String[] args) {
SimpleFactory.make("Benz");
SimpleFactory.make("Bmw");
}
}
3.工廠方法模式,就是在工廠層面也抽象一層。缺點是,如果增加了新的產品,也必須跟著增加新的工廠類。
public interface Car {
void make();
}
public class Benz implements Car{
public Benz() {
make();
}
@Override
public void make() {
System.out.println("make Benz");
}
}
public class Bmw implements Car{
public Bmw() {
make();
}
@Override
public void make() {
System.out.println("make Bmw");
}
}
public interface FactoryMethod {
void make();
}
public class BenzFactory implements FactoryMethod{
@Override
public void make() {
new Benz();
}
}
public class BwmFactory implements FactoryMethod{
@Override
public void make() {
new Bmw();
}
}
public class Client {
public static void main(String[] args) {
FactoryMethod f = new BenzFactory();
f.make();
f = new BwmFactory();
f.make();
}
}
4.抽象工廠模式,簡單的理解就是,一個具體生產物件的工廠,可以生產多種產品。而上面的工廠方法,一次只能生產一種產品。也可以理解成工廠方法和簡單工廠的結合,首先是在工廠層面進行抽象,生產產品的過程由具體的工廠完成,其次,每個具體的工廠可以根據需求生產不同的產品。
public interface Car {
void make();
}
public interface Bike {
void make();
}
public class Benz implements Car{
public Benz() {
make();
}
@Override
public void make() {
System.out.println("make Benz");
}
}
public class Bmw implements Car{
public Bmw() {
make();
}
@Override
public void make() {
System.out.println("make Bmw");
}
}
public class BenzBike implements Bike{
public BenzBike() {
make();
}
@Override
public void make() {
System.out.println("make BenzBike");
}
}
public class BmwBike implements Bike{
public BmwBike() {
make();
}
@Override
public void make() {
System.out.println("make BmwBike");
}
}
public interface AbsFactory {
void make();
void makeBike();
}
public class BenzFactory implements AbsFactory{
@Override
public void make() {
new Benz();
}
@Override
public void makeBike() {
new BenzBike();
}
}
public class BwmFactory implements AbsFactory{
@Override
public void make() {
new Bmw();
}
@Override
public void makeBike() {
new BmwBike();
}
}
public class Client {
public static void main(String[] args) {
AbsFactory a = new BenzFactory();
a.make();
a.makeBike();
a = new BwmFactory();
a.make();
a.makeBike();
}
}
相關文章
- 設計模式之工廠模式(二)設計模式
- Java設計模式之(二)——工廠模式Java設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 設計模式之工廠模式設計模式
- 設計模式之【工廠模式】設計模式
- Javascript設計模式(二)工廠模式JavaScript設計模式
- Javascript 設計模式之工廠模式JavaScript設計模式
- 設計模式之工廠模式(三)設計模式
- 設計模式之工廠模式(一)設計模式
- 略懂設計模式之工廠模式設計模式
- Java設計模式之工廠模式Java設計模式
- PHP設計模式之工廠模式PHP設計模式
- 設計模式之工廠方法模式設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 一.設計模式之工廠設計模式設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- Java設計模式(二):工廠方法模式Java設計模式
- 設計模式詳解——工廠模式(二)設計模式
- 設計模式學習(二)工廠模式——抽象工廠模式+登錄檔設計模式抽象
- 設計模式學習(二)工廠模式——工廠方法模式+登錄檔設計模式
- golang設計模式之抽象工廠模式Golang設計模式抽象
- 設計模式系列之「抽象工廠模式」設計模式抽象
- Java設計模式之工廠方法模式Java設計模式
- 設計模式之簡單工廠模式設計模式
- python設計模式之工廠模式Python設計模式
- golang設計模式之工廠方法模式Golang設計模式
- 設計模式系列之「工廠方法模式」設計模式
- Java設計模式之工廠模式(Factory)Java設計模式
- 【設計模式之抽象工廠】設計模式抽象
- 設計模式之工廠方法設計模式
- 【設計模式】工廠模式設計模式
- 設計模式 —— 工廠模式設計模式
- 設計模式-工廠模式設計模式
- 設計模式(工廠模式)設計模式
- 設計模式——工廠模式設計模式
- 設計模式----工廠模式設計模式