java 抽象工厂 类图_Java 抽象工厂模式
抽象工廠模式(Abstract Factory Pattern)是工廠方法模式的進一步抽象,其英文原話"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻譯,“為創建一組相關或相互依賴的對象提供一個借口,無需指定它們的詳細類”。抽象工廠模式一般是用于創一族產品,而且這族產品分不同的等級;不同的詳細工廠類生產不同等級的一族產品。抽象工廠模式也有四種角色:抽象工廠、詳細工廠、抽象產品和詳細產品,詳細解釋參見“Java
工廠方法模式”一文。抽象工廠模式的類圖例如以下:
能夠看到產品族包含ProductA和ProductB兩種產品,每一個詳細工廠都能生產這兩種產品,僅僅是ConcreteFactory1生產的等級為1的族產品;ConcreteFactory2生產的是等級為2的族產品。以下以上圖為模型,寫一個demo,測試抽象工廠模式。
抽象工廠:AbstractFactory接口
//抽象工廠,定義了生產族產品的方法;
public interface AbstractFactory {
public ProductA factoryA();
public ProductB factoryB();
}
抽象產品:ProductA接口
//抽象產品A定義了產品的公共方法,產品A和B屬于一個產品族
public interface ProductA {
public void method1();
public void method2();
}
抽象產品:ProductB接口
//抽象產品B定義了產品的公共方法,產品A和B屬于一個產品族
public interface ProductB {
public void method1();
public void method2();
}
詳細工廠(生產等級為2的族產品):ConcreteFactory1類
//ConcreateFactory1是用來生產等級為1的產品A,B;
public class ConcreateFactory1 implements AbstractFactory {
//生產等級為1的產品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA1();
}
//生產等級為1的產品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB1();
}
}
詳細工廠(生產等級為1的族產品):ConcreteFactory2類
public class ConcreateFactory2 implements AbstractFactory {
//生產等級為2的產品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA2();
}
//生產等級為2的產品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB2();
}
}
詳細產品(等級為1的A產品):ConcreteProductA1類
//等級為1的詳細產品A
public class ConcreateProductA1 implements ProductA {
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等級為1的產品A的method1()");
}
@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等級為1的產品A的method2()");
}
}
詳細產品(等級為2的A產品):ConcreteProductA2類
//等級為2的詳細產品A
public class ConcreateProductA2 implements ProductA {
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等級為2的產品A的method1()");
}
@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等級為2的產品A的method2()");
}
}
詳細產品(等級為1的B產品):ConcreteProductB1類
//等級為1的產品B
public class ConcreateProductB1 implements ProductB{
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等級為1的產品B的method1()");
}
@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等級為1的產品B的method2()");
}
}
詳細產品(等級為2的B產品):ConcreteProductB2類
//等級為2的產品B
public class ConcreateProductB2 implements ProductB {
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等級為2的產品B的method1()");
}
@Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等級為2的產品B的method2()");
}
}
執行結果:
等級為1的產品A的method1()
等級為1的產品A的method2()
等級為1的產品B的method1()
等級為1的產品B的method2()
等級為2的產品A的method1()
等級為2的產品A的method2()
等級為2的產品B的method1()
等級為2的產品B的method2()
總結:
抽象工廠模式相對于工廠方法模式來說,每一個詳細工廠能夠生產一族產品(即多種產品);而工廠方法模式是詳細工廠生產對應的詳細產品,僅僅能生產一種產品。當產品族中僅僅有一種產品時抽象工廠模式退化成工廠方法模式。
總結
以上是生活随笔為你收集整理的java 抽象工厂 类图_Java 抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 截图神器FastStone Captur
 - 下一篇: vs2005 sp1补丁安装,报1718