三种工厂模式的实现

实验二:工厂模式(简单工厂方法)

(1)UML设计图

(2)核心实现代码

1)Shape接口

接口中有draw()erase()两个方法,供对象类覆写

public interface Shape {

    abstract String draw();

    abstract String erase();

}

 

 

 

2)Creator工厂类

public class Creator {

    public static Shape factory(String option){

        Shape shape = null;

        if(option.compareTo("circle")==0){

            shape = new Circle();

        }

        else if(option.compareTo("rectangle")==0){

            shape = new Rectangle();

        }

        else if(option.compareTo("triangle")==0){

            shape = new Triangle();

        }

        return shape;

    } 

   }

 

3)Circle

      public class Circle implements Shape{

          public String draw() {

              return "绘制圆形!";

      }

          public String erase() {

              return "擦除圆形!";

          }

       }

 

 

 

4)Rectangle

      public class Rectangle implements Shape{

        Public String draw() {

           return "绘制方形!";

        }

        public String erase() {

           return "擦除方形!";

     }

    }

 

5)Triangle

      public class Triangle implements Shape{

          public String draw() {

              return "绘制三角形!";

      }

          public String erase() {

              return "擦除三角形!";

          }

       }

 

 

 

 

                        


 

(4)心得体会

这次做的实验是工厂模式中最基础的部分——简单工厂模式,它是利用一个Creator来负责实例化对象,这样就可以简化了应用程序,应用程序本身不再含有大量的条件语句判定何时选取哪个类,这样大大增加了程序的可读性,而且我们也可以更好地管理程序功能,程序的层次更加明确。

当然,由于这只是个基本的工厂模式,这并不符合程序的开闭原则,这就需要我们更进一步学习工厂模式和抽象工厂模式,这都需要以基本的工厂模式为基础才能完成,所以这次的实验是非常重要和必要的,只有做好了这次的实验,才能继续完成下面更加复杂的模型。更能让我们了解到设计模式的重要性,让我受益匪浅!

 

 

 

 

实验二:工厂模式(工厂方法模式)

 

(1) UML设计图

 

(2) 核心实现代码

1)保险类接口

接口中有getInfo()供对象类覆写

 

public interface AutoInsurance {

    abstract String getInfo();

}

 

 

 

 

 

2) BodyInjur

public class BodyInjur implements AutoInsurance{

    private String description;

    public String getInfo(){

        description = "驾驶员事故中受伤";

        return description;

    }

}

3) Collsion

public class CarDamage implements AutoInsurance{

    String description;

    public String getInfo(){

        description = "车辆损坏的损失";

        return description;

    }   

}

4) PersonInjur

public class BodyInjur implements AutoInsurance{

    private String description;

    public String getInfo(){

        description = "驾驶员事故中受伤";

        return description;

    }

}

 

5) Other

      public class Other implements AutoInsurance{

         String description;

         public String getInfo(){

         description = "其他事故导致";

         return description;

        } 

     }

 

 

 

 

 

 

6)Creator接口

      public interface Creator {

        public AutoInsurance getInsurObj();

      }

 

7)BodyPolicy

      public class BodyPolicy implements Creator{

         Public AutoInsurance getInsurObj(){

            return new BodyInjur();

      }

    }

 

8)CarPolicy

      public class CarPolicy implements Creator{

         public AutoInsurance getInsurObj(){

            return new CarDamage();

      }

    }

9)PersonPolicy

     public class PersonPolicy implements Creator{

        public AutoInsurance getInsurObj(){

           return new PersonInjur();

      }

   }

10)OtherPolicy

      public class OtherPolicy implements Creator{

         public AutoInsurance getInsurObj(){

            return new Other();

      }

    }

 

 

 

 

 

                        


(5)心得体会

工厂模式是为了克服简单工厂方法模式的缺点,使工厂模式符合开闭原则,每当有一个新的产品类被加入到产品类的结构当中,只需要加入对应的类,而不需要增加新的条件语句,这样就能更好地管理代码和让代码的可读性增强;从做过的简单工厂之中再做工厂模式,就可以深刻地发现两种方法的不同之处,工厂方法将创建对象的逻辑与任务交给了工厂类。

通过这次实验,使我更能深刻体会创建型设计模式的结构,也为后面学习范围更大的抽象工厂模式埋下伏笔。

 

 

 

 

 

实验二:工厂模式(抽象工厂模式)

 

(1) UML设计图

(2) 核心实现代码

BodyInjur接口

接口中有getInfo()供对象类覆写

 

public interface BodyInjur {

    public String getInfo();

}

 

 

 

 

 

2) CarDamage接口

public interface CarDamage {

    public String getInfo();

}

3) PersonInjur接口

public interface PersonInjur {

    public String getInfo();

}

4) Other接口

public interface Other {

     public String getInfo();

}

 

5) PiccBodyInjur

     public class PiccBodyInjur implements BodyInjur{

    public String getInfo() {

        return "中国人寿保险:司机受伤!";

}

}

 

6) PinAnBodyInjur

     public class PinAnBodyInjur implements BodyInjur{

    public String getInfo() {

        return "平安保险:司机受伤!";

}

}

6) PiccCarDamage

     public class PiccCarDamage implements CarDamage{

    public String getInfo() {

        return "中国人寿保险:车辆损坏!";

}

}

7) PinAnCarDamage

     public class PinAnCarDamage implements CarDamage{

    public String getInfo() {

        return "平安保险:车辆损坏!";

}

}

8) PiccPersonInjur

    public class PiccPersonInjur implements PersonInjur{

    public String getInfo() {

        return "中国人寿保险:人员受伤!";

}

}

9) PinAnPersonInjur

     public class PinAnPersonInjur implements PersonInjur{

    public String getInfo() {

        return "平安保险:人员受伤!";

}

}

 

10) PiccOther

     public class PiccOther implements Other{

    public String getInfo() {

        return "中国人寿保险:多种事故!";

}

}

 

11) PinAnOther

    public class PinAnOther implements Other{

    public String getInfo() {

        return "平安保险:多种事故!";

}

}

 

 

12InsuranceCompany接口

      public interface Creator {

        public AutoInsurance getInsurObj();

      }

13PiccFactory接口

     public class PiccFactory extends InsuranceCompany{

        public BodyInjur getBodyInjur() {

          return new PiccBodyInjur();

      }

     public CarDamage getCarDamage() {

        return new PiccCarDamage();

}

public PersonInjur getPersonInjur() {

        return new PiccPersonInjur();

    }

    public Other getOther() {

        return new PiccOther();

    }  

}

 

 

14PinAnFactory接口

      public class PinAnFactory extends InsuranceCompany{

        public BodyInjur getBodyInjur() {

          return  new PinAnBodyInjur();

       }

       public CarDamage getCarDamage() {

        Return new PinAnCarDamage();

       }

        public PersonInjur getPersonInjur() {

         return new PinAnPersonInjur();

       }

        public Other getOther() {

         Return new PinAnOther();

      }

   }

 

 

 

 

 

 

 

                        


 

(6)心得体会

抽象工厂模式是工厂方法中范围最大的一个设计模式,它利用一个工厂层次类担负起创建所需要的的N组产品对象的责任,正如小米手机厂担负起生成手机、平板、智能手表的工作。这样当增加一个产品的时候,只需要增加对应的类,而不需要修改原来的代码,符合开闭原则;通过这次对抽象工厂的实现,以及之前两次工厂方法的实现,我基本掌握了工厂方法创建对象的设计模式,在以后的学习中一定要活学活用,用在实践中!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值