创建模式
1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到具体的子类。大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。
2.抽象工厂模式(Abstract Factory) 针对多个产品等级的情况,而工厂方法模式针对单一产品等级的情况。
1.工厂方法模式(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();
- }
- }
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();
}
}
2.抽象工厂模式(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);
- }
- }