設計模式學習系列二:工廠模式
阿新 • • 發佈:2019-01-10
工廠模式
工廠模式實際上是包含了三類:
- 簡單工廠
- 工廠方法
- 抽象工廠
- 簡單工廠是一個工廠生產某一類產品;
- 工廠方法是用多個工廠來生產某一類產品;
- 抽象工廠就是用多個工廠來生產多類產品;
這三種模式實際上都是屬於建立型的模式,從上至下依次變得複雜。
簡單工廠
工廠方法
工廠方法模式(Factory Method)將程式中建立物件的操作,單獨出來處理,建立一個產品的工廠介面,把實際的工作轉移到具體的子類。大大提高了系統擴充套件的柔性,介面的抽象化處理給相互依賴的物件建立提供了最好的抽象模式。
public class TestFactoryMethod { public static void main(String[] args) { AnimalFactory af=new DogFactory(); Animal1 a=af.getAnimal(); } } abstract class Animal1{} class Dog1 extends Animal1{} class Cat1 extends Animal1{} abstract class AnimalFactory{ public abstract Animal1 getAnimal(); } class DogFactory extends AnimalFactory{ public Animal1 getAnimal(){ System.out.println("Dog"); return new Dog1(); } } class CatFactory extends AnimalFactory{ public Animal1 getAnimal(){ System.out.println("Cat"); return new Cat1(); } }
抽象工廠
抽象工廠模式(Abstract Factory) 針對多個產品等級的情況,而工廠方法模式針對單一產品等級的情況。
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class TestAbstractFactory { public static void main(String[] args) { GUIFactory fact=new SwingFactory(); Frame f=fact.getFrame(); Component c1=fact.getButton(); Component c2=fact.getTextField(); f.setSize(500,300); f.setLayout(new FlowLayout()); f.add(c1); f.add(c2); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } } abstract class GUIFactory{ public abstract Component getButton(); public abstract Component getTextField(); public abstract Frame getFrame(); } class AWTFactory extends GUIFactory{ public Component getButton() { return new Button("AWT Button"); } public Frame getFrame() { return new Frame("AWT Frame"); } public Component getTextField() { return new TextField(20); } } class SwingFactory extends GUIFactory{ public Component getButton() { return new JButton("Swing Button"); } public Frame getFrame() { return new JFrame("Swing Frame"); } public Component getTextField() { return new JTextField(20); } }