目录
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();
}
}