java 工厂模式

目录

1.简单工厂模式

2.工厂方法模式

3.抽象工厂模式


1.简单工厂模式

定义:又称为静态工厂模式 ,它属于创建型模式。在简单工厂模式中 ,可以根据参数的不同返回不同的实例。简单工厂专门定义了一个类来创建其他类的实例,被创建的实例一般有相同的父类。

优点:让创建和使用分离。该模式对对象创建管理方式最为简单。

缺点:由于是静态获取方法来获取对象,不能通过不同的方式去改变创建行为,所有有一定的局限性。当需要重新创建实例时又需要,对创建的判断条件进行改变。

实例

创建一个抽象类Program来管理两个子类实例ProgramA和ProgramB 可以根据不同的参数来返回不同的实例 Program

package FactoryMode;

public  abstract class Program {
    public abstract void program();

}


public class ProgramB  extends Program{
    @Override
    public void program() {
        System.out.println("ProgramB");

    }
}   

public class ProgramA extends Program {
    @Override
    public void program() {
 System.out.println("ProgramA");
    }


} 
import java.util.Scanner;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        
        Scanner input=new Scanner(System.in);
        String sele=input.next();

        if(sele.equals("ProgramA")){
            ProgramA programA=new ProgramA();
            programA.program();
        }

        if(sele.equals("ProgramB")){
            ProgramB programB=new ProgramB();
            programB.program();
        }
    }
}

2.工厂方法模式

定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到了子类。工厂方法模式将生成具体产品的任务分发给具体的产品工厂,对象的创建交给子类。子类来实现创建方法。

优点:由子类创建对象和实现创建方法。

缺点:该模式中只能创建一种产品。

实例

package FactoryMode;

public interface Product {
    public Product product();

}


public class ProductA implements  Product{
    @Override
    public Product product() {
       return new ProductA();
    }
}

public class ProductB implements  Product{

    @Override
    public Product product() {
        return new ProductB();
    }
}

public class Test1 {
    public static void main(String[] args) {
        Product A=new ProductA();
        Product B=new ProductB();
        A.product();
        B.product();


    }
}

3.抽象工厂模式

定义:使对象的创建被实现在工厂接口所暴露出来的方法中。当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建对象。

优点:它让具体的创建实例过程与客户端分离,在一个应用中只需要在初始化的时候出现一次。

缺点:需要增加系列产品时会进行大量的改动。

实例

package FactoryMode;

public interface PC {
    void make();
}

public class HuaWeiPC implements PC{
   public HuaWeiPC(){
       this.make();
   }
    @Override
    public void make() {
    }
}
public class Mac  implements  PC{
 public Mac(){
     this.make();
 }
    @Override
    public void make() {

    }
}

public interface AbstractFactory {
    Phone makePhone();
    PC makePC();
}

public class HuaWeiFactory implements  AbstractFactory{
    @Override
    public Phone makePhone() {
        return new HuaWeiPhone();
    }

    @Override
    public PC makePC() {
        return new HuaWeiPC();
    }
}

public class AppleFactory implements AbstractFactory{
    @Override
    public Phone makePhone() {
        return new Iphone();
    }

    @Override
    public PC makePC() {
        return new  Mac();
    }
}

public class Demo {
    public static void main(String[] arg) {
        AbstractFactory HuaWeiFactory = new HuaWeiFactory();
        AbstractFactory ppleFactory = new AppleFactory();
        HuaWeiFactory.makePhone();           
        HuaWeiFactory.makePC();                
        appleFactory.makePhone();       
        appleFactory.makePC();            
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值