*简单工厂模式、抽象工厂模式

反射(java reflection)

在JDK中,主要由以下类来实现java反射机制,这些类都位于java.lang.reflect包中。

  1. Class类:代表一个类
  2. Constructor类:代表类的构造方法
  3. Field类:代表类的成员变量
  4. Method类:代表类的方法

语义分析

生活中的语义分析是一个优秀的方法,可以方便构建应用程序的框架。例如甲和乙关于工厂和工作的对话,如下所示。
甲:你在哪里上班?
乙:小汽车工厂。
甲:做什么工作?
乙:生产小汽车。
甲:生产几种小汽车?
乙:高、中、低档3中小汽车。
可以看出生活中语义描述事物的一个显著特点:范围从大到小,从泛泛到具体、从一般到特殊。因此计算机程序结构一定也要遵循这种结构,即按层次划分。

工厂模式

工厂模式一般分为简单工厂、工厂、抽象工厂3种情况,属于创建型设计模式。

简单工厂模式:

(1)定义小汽车接口

public interface ICar{
}

(2)下面定义高、中、低档具体的小汽车

public class TopCar implements ICar{
}
public class MidCar implements ICar{
}
public class LowCar implements ICar{
}

(3) 简单工厂:CarSimpleFactory.java

使用简单工厂的时候,没有创建简单工厂类的示例的必要。因此,可以把简单工厂类实现成一个工具类,直接使用静态方法就可以了。

public class CarSimpleFactory{
    public static final String TOPTYPE="toptype";
    public static final String MIDTYPE="midtype";
    public static final String LOWTYPE="lowtype";

    // 简单工厂的方法通常是静态的,所以也被称为静态工厂。
    // 如果要防止客户端无谓地创造简单工厂示例,还可以把简单工厂的构造方法私有化。
    public static ICar create(String mark){
            ICar obj=null;
            if(mark.equals(TOTYPE)){    //如果是高档车类型
                 obj=new TopCar();      //则创建高档车对象
            }
            if(mark.euqals(MIDTYPE)){
                 obj=new MidCar();
            }
            else if(mark.equals(LOWTYPE)){
                 obj=new LowCar();
           }
           return obj;  //返回选择的对象
     }

     // 测试
     public static void main(String[] args){
            //从工厂中创建对象
           ICar obj=CarSimpleFactory.create("toptype");
     }
}

抽象工厂模式

(1)问:能否不修改工厂类就能新增一个超高档类型的汽车?
答:可以把工厂类设计为抽象类,再设计高中低档类型的子工厂类去继承它,由这些子工厂类去创建各自对应的高中低档类型汽车对象。如下:
抽象工厂模式

(2)定义小汽车接口

public interface ICar{
}

(3)定义抽象工厂

public  abstract  class  AbstractFactory {
     public abstract  ICar  create();  / /抽象的创建方法
}

(4)下面定义高、中、低档具体的小汽车

public class TopCar implements ICar{
}
public class MidCar implements ICar{
}
public class LowCar implements ICar{
}

(5)下面定义高、中、低档具体的小汽车工厂


//子工厂继承抽象工厂
public class TopFactory  extends  AbstractFactory{

      //高档工厂生成高档小汽车对象
      public  ICar  create(){
         return TopCar();
      } 

      // 测试
      public  static  void main(String[]  args){
             AbstractFactory obj=new TopFactory(); //多态创建高档工厂
             ICar  car = obj.create();  //获得高档工厂中创建的高档小汽车对象
      }
} 

为什么使用抽象类:

抽象类为子类提炼出公共的方法,并提供一个或几个抽象方法留给子类实现;
抽象类的设计体现了模板模式的设计思想,即抽象类的普通方法依赖一个抽象方法,而抽象方法则推迟到子类中实现细节

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值