欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java设计模式编程中简单工厂与抽象工厂模式的使用实例

程序员文章站 2024-03-09 15:16:17
简单工厂模式 类图 通过一个工厂类,以一个条件来创建对应的对象 //业务功能 public interface icalculation {...

简单工厂模式
类图

Java设计模式编程中简单工厂与抽象工厂模式的使用实例

通过一个工厂类,以一个条件来创建对应的对象

//业务功能 
public interface icalculation { 
  double getresult(double numa, double numb); 
} 

public class calcadd implements icalculation { 
 
  @override 
  public double getresult(double numa, double numb) { 
    system.out.println("加法"); 
    return numa + numb; 
  } 
 
} 

public class calcsubtract implements icalculation { 
 
  @override 
  public double getresult(double numa, double numb) { 
    system.out.println("减法"); 
    return numa - numb; 
  } 
 
} 

/* 
 * 简单工厂模式 关注:对象的创建 
 * 建立一个工厂类,对实现了同一接口的或者是存在继承关系的一些类进行实例的创建 
 */ 
public class test4simple { 
  public static void main(string[] args) { 
//   string operation = "/"; 
    string operation = "+"; 
//   string operation = "-"; 
//   string operation = "*"; 
    double numa = 182, numb = 33; 
    icalculation createcalc = calcsimplefactory.createcalc(operation); 
    double result = createcalc.getresult(numa, numb); 
    system.out.println(result); 
  } 
} 

简单工厂的缺陷: 简单工厂创建产品时需要传递相应的参数,如果传递不正确就取不到对象了。
改进:多方法创建不同产品
类图

Java设计模式编程中简单工厂与抽象工厂模式的使用实例

public class calcmultiplefactory { 
   
  public static icalculation produceadd() { 
    return new calcadd(); 
  } 
   
  public static icalculation producesubtract() { 
    return new calcsubtract(); 
  } 
   
  public static icalculation producemultiply() { 
    return new calcmultiply(); 
  } 
   
  public static icalculation producedivide() { 
    return new calcdivide(); 
  } 
} 

public class test4multiple { 
 
  public static void main(string[] args) { 
    double numa = 182, numb = 33; 
     
    icalculation createcalc = calcmultiplefactory.produceadd(); 
    double result = createcalc.getresult(numa, numb); 
    system.out.println(result); 
     
    createcalc = calcmultiplefactory.producesubtract(); 
    result = createcalc.getresult(numa, numb); 
    system.out.println(result); 
     
    createcalc = calcmultiplefactory.producemultiply(); 
    result = createcalc.getresult(numa, numb); 
    system.out.println(result); 
     
    createcalc = calcmultiplefactory.producedivide(); 
    result = createcalc.getresult(numa, numb); 
    system.out.println(result); 
  } 
} 

抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:具体的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现具体功能,或派生
类图

Java设计模式编程中简单工厂与抽象工厂模式的使用实例

//抽象产品1 
public interface iproduct1 { 
  public void show(); 
} 

//抽象产品2 
public interface iproduct2 { 
  public void show(); 
} 

//实体产品1 
public class product1 implements iproduct1 {  
  public void show() {  
    system.out.println("创建了1型产品");  
  }  
}  

//实体产品2 
public class product2 implements iproduct2 { 
  public void show() { 
    system.out.println("创建了2型产品"); 
  } 
} 

/* 
 * 1a 1b属于product1 同一产品等级结构中 
 * 2a 2b属于product2 
 */ 
public class gradeproduct1a extends product1 { 
 
  @override 
  public void show() { 
    super.show(); 
    system.out.println("这是产品1下的:产品a"); 
  } 
   
} 

public class gradeproduct1b extends product1 { 
 
  @override 
  public void show() { 
    super.show(); 
    system.out.println("这是产品1下的:产品b"); 
  } 
} 

public class gradeproduct2a extends product2 { 
 
  @override 
  public void show() { 
    super.show(); 
    system.out.println("这是产品2下的:产品a"); 
  } 
} 

public class gradeproduct2b extends product2 { 
 
  @override 
  public void show() { 
    super.show(); 
    system.out.println("这是产品2下的:产品b"); 
  } 
} 

//抽象工厂 创建不同的抽象产品 
public interface ifactory { 
  public iproduct1 createproduct1a();//1类产品 型号a 
  public iproduct1 createproduct1b();//1类产品 型号b 
  public iproduct2 createproduct2a();//2类产品 型号a 
  public iproduct2 createproduct2b();//2类产品 型号b 
} 

//实体工厂 创建实体产品,返回类型为抽象产品 
public class factory implements ifactory { 
 
  public iproduct1 createproduct1a() { 
    return new gradeproduct1a(); 
  } 
 
  public iproduct1 createproduct1b() { 
    return new gradeproduct1b(); 
  } 
 
  public iproduct2 createproduct2a() { 
    return new gradeproduct2a(); 
  } 
 
  public iproduct2 createproduct2b() { 
    return new gradeproduct2b(); 
  } 
} 

/* 
 * 抽象工厂模式:用来创建一组相关或者相互依赖的对象 
 * 
 * 流程:抽象工厂,实体工厂   生产产品 
 *   抽象产品,实体产品    实现产品功能 
 * 缺点:当需要增加一个产品(由抽象和实体构成),工厂都需要更改 
 */ 
public class test4abstract { 
  public static void main(string[] args) { 
    ifactory factory = new factory(); 
    iproduct1 product1a = factory.createproduct1a(); 
    product1a.show(); 
    iproduct1 product1b = factory.createproduct1b(); 
    product1b.show(); 
     
    iproduct2 product2a = factory.createproduct2a(); 
    product2a.show(); 
    iproduct2 product2b = factory.createproduct2b(); 
    product2b.show(); 
  } 
}