当前位置: 移动技术网 > IT编程>开发语言>Java > Java设计模式编程中简单工厂与抽象工厂模式的使用实例

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

简单工厂模式
类图

201642195447625.jpg (966×712)

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

//业务功能 
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); 
  } 
} 

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

201642195519770.jpg (926×736)

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); 
  } 
} 

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

201642195549773.jpg (1396×882)

//抽象产品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(); 
  } 
} 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网